彈出式選單(PopMenu)

2021-04-13 00:33:35 字數 2347 閱讀 4454

彈出式選單(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...