在選單條上新增泡泡提示

2021-04-08 13:15:14 字數 4706 閱讀 4575

該功能的實現**於codeproject上面的乙個例子《tooltips for menu item and popup menuitem》,其實例子講的步驟很簡單,不過我不打算簡單的翻譯一下,林語堂先生不是說:「只用一樣東西,不明白它的道理,實在不高明」。

實現該功能的核心在於作者自己建立的乙個menutooltip類,182行的**實現了選單提示的功能,下面我就將其一一解釋開來,在每行**的後面有具體的解釋。

#ifndef _menu_tooltip //條件編譯語句,判斷是否定義了_menu_toolti巨集

#define _menu_tooltip

//以下定義一些常量識別符號

#ifndef tts_noanimate

#define tts_noanimate           0x10

#define tts_nofade              0x20

#define tts_balloon             0x40

#define tts_close               0x80

#define ttm_settitlea           (wm_user + 32)  // wparam = tti_*, lparam = char* sztitle

#define ttm_settitlew           (wm_user + 33)  // wparam = tti_*, lparam = wchar* sztitle

#ifdef unicode

#define ttm_settitle            ttm_settitlew

#else

#define ttm_settitle            ttm_settitlea

#endif

#endif

class cmenutooltip

// 建立與選單項相關的提示

void create(hwnd hparent, lpctstr scztiptext,

hinstance hinstance = null,

dword dwstyle = 0,

lpctstr scztiptitle = null);

//觸發wm_menuselect訊息時呼叫此函式

void onmenuselect(uint nitemid, uint nflags, hmenu hsubmenu);

// 顯示或隱藏提示的函式

void showtooltip(bool bshow)

// 設定提示出現的位置

void settooltipposition(hmenu hmenu, uint nitemid)

;// find item rectangle and position

//根據選單項的數量完成以下迴圈

for(int nitem = 0; nitem < ::getmenuitemcount(hmenu); nitem++)

}//傳送訊息以設定顯示提示的位置

::sendmessage(m_htooltip, ttm_trackposition, 0,

(lparam)makelparam(rt.right, rt.bottom + 2));

//將提示顯示在最頂層,否則的話提示箭頭會出現在選單下面,試試看:->

::setwindowpos(m_htooltip, hwnd_topmost ,0,0,0,0, swp_nosize|swp_noactivate|swp_nomove);

}// 更新提示資訊

void updatetooltiptext(lpctstr szbuff, hinstance hinstance = 0)

//過載控制代碼操作符

operator hwnd()

private:

hwnd m_htooltip;

hwnd m_hparent;

tchar m_szdefault[_max_path] ;//存放預設提示的串

hinstance m_hinstance;

};inline//以下內聯函式建立提示控制項

void cmenutooltip::create(hwnd hparent, lpctstr scztiptext, hinstance hinstance,

dword dwstyle, lpctstr scztiptitle)

else

}ti.rect.left = ti.rect.top = ti.rect.bottom = ti.rect.right = 0;

//把提示新增到控制項中

::sendmessage(m_htooltip,ttm_addtool,0,(lparam)&ti);

::sendmessage(m_htooltip, ttm_setmaxtipwidth, 0, 300);

if(scztiptitle)

}inline //以下內聯函式設定在選定選單時所做的操作

void cmenutooltip::onmenuselect(uint nitemid, uint nflags, hmenu hsubmenu)

if(!(nflags & mf_popup))

}#endif  

//以下部分主要用於更新提示文字,否則文字是固定的

if(szbuff[0] != 0)

else

showtooltip(true);//設定需要顯示提示}}

#endif _menu_tooltip

上面的注釋寫的比較詳細了,您可以在相應的地方做修改,以更改提示的位置和內容,將上面的**存為乙個名為menutooltip.h的標頭檔案,將其加入到您的工程當中,然後在需要處理提示資訊的類的初始函式(如對話方塊的oninitdialog函式或者是類的建構函式)中新增如下語句:

mymenutooltip.create(m_hwnd, _t("sample menu text"), afxgetresourcehandle()

,tts_noprefix | tts_balloon

, _t("my best tool tip title")

);同時在相應的類中建立onmenuselect函式如下:

void cmenuitemtooltipdlg::onmenuselect(uint nitemid, uint nflags, hmenu hsubmenu)

同時不要忘了加入上述標頭檔案,並定義乙個提示資訊類的變數

#include "menutooltip.h"

cmenutooltip mymenutooltip;

最後在訊息迴圈中加入on_wm_menuselect()

一切ok了。

ps:在這裡顯示的提示資訊都是您在定義選單資源時設定的,也就是在定義乙個選單項時,右鍵選定屬性,在general中有乙個prompt文字框,用於設定提示文字,如果文字過長,可以在其中加上「/r/n」進行換行。

cnbie blog

原文:

在選單中加入圖示

'api函式宣告

option explicit

private declare function getmenu lib "user32"(byval hwnd as long) _

as long '取得視窗的選單控制代碼,hwnd是視窗的控制代碼

private declare function getsubmenu lib "user32"(byval hmenu as _

long,byval npos as long) as long '取得子選單控制代碼,npos是選單的位置

private declare function setmenuitembitmaps lib "user32"(byval _

hmenu as long,byval npos as long,byval wflags as long,byval _

hbitunchecked as long,byval h*****ecked as long) as long

'為選單設定相應的圖形

const mf_bitmap=&h400&

'用image或picture或imagelist控制項裝入圖形(必須是bmp格式),16*16左右

'建好選單

private sub form_load()

dim hmenu,hsubmenu1,hsubmenu2 as long

hmenu=getmenu(me.hwnd)

hsubmenu1=getsubmenu(hmenu,0) '取得第一項選單的子選單控制代碼

setmenuitembitmaps hsubmenu1,0,mf_bitmap,imagelist1.listimages(1) _

.picture,imagelist1.listimages(1).picture

'為hsubmenu1的第一項設定圖形,假設用imagelist控制項裝入圖形

setmenuitembitmaps hsubmenu1,1,mf_bitmap,imagelist1.listimages(2) _

.picture,imagelist1.listimages(2).picture

'設定第二項,同樣你還可以設定第xx項。

hsubmenu2=getsubmenu(hmenu,1)

'取得第二項選單的子選單控制代碼

'也可用setmenuitembitmaps來設定它的圖形,只更改hsubmenu1為hsubmenu2

'即可end sub

dataGridView上新增「右鍵選單」

datagridview上新增 右鍵選單 需要新增工具 contextmenustrip1 然後將form上的contextmenustrip設定contextmenustrip1,下面未用到的,將注釋 執行右鍵的命令 private void cxtoolstripmenuitem click o...

在系統選單中新增選單項

1 新建乙個基於對話方塊的應用程式 2 在對話方塊類中定義乙個選單指標m pmenu,用於指向系統選單.3 主要程式 在對話方塊初始化時 oninitdialog函式中 獲取系統選單指標,向系統選單中新增選單項.m pmenu getsystemmenu false 獲取正在使用的系統選單指標 響應...

在xml中新增提示

步驟1 在window preferences myeclipse files and editors xml xml catalog 步驟2 在xml catalog對話方塊中選中add,在add xml catalog entry中,key type 中選uri,在location中點file ...