彈出式選單(popmenu)大家都熟悉,在win98的桌面上單擊滑鼠右鍵彈出的選單就是彈出式選單。通常情況下,彈出式選單在滑鼠右鍵單擊時彈出,當然,也可以根據需要隨時彈出。 在vc++5的mfc中,管理選單的類叫cmenu。下面我向大家介紹建立乙個彈出式選單的基本方法。
一、在資源編輯器中建立乙個選單資源
新建乙個選單資源,比如把選單的id號為idc_popmenu。此選單有一項兩層,即有乙個可彈出的選單項,而此選單項的彈出內容即為將要建立的彈出式選單的內容。如右圖,「可彈出項」下的選單即為將要建立的彈出式選單的內容。實際上,「可彈出項」這個名稱在以後的操作中不會被用到,但vc++5不允許直接建立彈出式選單,所以採用先建立「可彈出項」的方法。
至於每乙個選單項的訊息對映,與一般的選單相同。
二、使用cmenu類物件
cmenu類的成員函式較多,但建立彈出式選單只需用到其中幾個成員函式。
1、loadmenu函式
原型:bool loadmenu( uint nidresource );
其中nidresource是選單資源的id號,這裡用的是剛建立的idc_popmenu。
2、getsubmenu函式
原型:cmenu* getsubmenu( int npos ) const;
此函式用於得到子選單的指標。npos為層數,0為第一層子選單……以此類推。
由於我們需要的是「可彈出項」的第一層子選單,因此用getsubmenu(0)來得到第一層子選單的類指標。
3、trackpopupmenu函式
原型:bool trackpopupmenu( uint nflags,int x,int y,cwnd* pwnd,lpcrect lprect = null );
其中:
nflags為螢幕座標屬性和滑鼠座標屬性
螢幕座標屬性:
tpm_centeralign 橫向將選單以x居中
tpm_leftalign 橫向將選單以x左對齊
tpm_rightalign 橫向將選單以x右對齊
滑鼠按鍵屬性(只在響應wm_contextmenu訊息時有效):
tpm_leftbutton 連續按? 右鍵不會連續彈出選單,滑鼠右鍵不可用於選定選單項
tpm_rightbutton 連續按滑鼠右鍵會連續彈出選單,滑鼠右鍵可用於選定選單項
x,y均為螢幕座標
lprect 選單所佔的區域。如果為null,當使用者在選單以外的區域按滑鼠鍵時,選單會消失
三、例項
1、當滑鼠右鍵單擊程式視窗的客戶區時,程式會收到一條wm_contextmenu訊息,此時是彈出選單的最好時機
用classwizard中的「add windows message handler」功能新增對wm_context訊息的響應函式,函式中**如下:
void cmydlg::oncontextmenu(cwnd* pwnd, cpoint point)
2、在其他時候彈出選單也可以,比如,可以響應wm_lbuttondown訊息。這樣,在滑鼠左鍵單擊時也能彈出選單
用classwizard中的「add windows message handler」功能新增對wm_lbuttondown訊息的響應函式,函式中**如下:
void cmfc5dlg::onlbuttondown(uint nflags, cpoint point)
注意:在wm_lbuttondown訊息中得到的point物件所存的座標是相對於視窗客戶區的,而trackpopupmenu中的x,y需要是相對於螢幕的,所以需用clienttoscreen函式進行轉換,但此訊息響應函式要呼叫cdialog::onlbuttondown(nflags, point),故應該用screentoclient函式將point所存的座標還原為相對於視窗客戶區的。看情況用clienttoscreen(&point)
方法一:調入選單資源
/
// cmy1view message handlers
///先在
menu
資源中新增彈出式選單,命名:
idr_menu1
///再新增
cview
類的訊息
wm_contextmenu
///在訊息處理函式中新增函式
void cmy1view::oncontextmenu(cwnd* pwnd, cpoint point)
///
方法二:自主新增選單項
///自己建立選單項
void cmy2view::oncontextmenu(cwnd* pwnd, cpoint point)
}正文
彈出式選單
彈出式選單 popmenu 大家都熟悉,在win98的桌面上單擊滑鼠右鍵彈出的選單就是彈出式選單。通常情況下,彈出式選單在滑鼠右鍵單擊時彈出,當然,也可以根據需要隨時彈出。在vc 5的mfc中,管理選單的類叫cmenu。下面我向大家介紹建立乙個彈出式選單的基本方法。一 在資源編輯器中建立乙個選單資源...
製作彈出式選單
lonkil 很老的一篇關於選單的文章,還是不錯的。發出來吧!一 在資源編輯器中建立乙個選單資源 新建乙個選單資源,比如把選單的id號為idc popmenu。此選單有一項兩層,即有乙個可彈出的選單項,而此選單項的彈出內容即為將要建立的彈 出式選單的內容。如右圖,可彈出項 下的選單即為將要建立的彈出...
建立彈出式選單
建立彈出式選單時,先建立乙個選單資源,然後呼叫loadmenu方法載入選單資源。bool loadmenu lpctstr lpszresourcename bool loadmenu uint nidresource 返回值 如果選單資源裝載成功,則返回非零值,否則為0。引數 lpszresour...