MFC中利用CMenu類動態添加快顯功能表和響應函數步驟介紹

來源:互聯網
上載者:User

方法:
MFC中利用CMenu類動態添加快顯功能表和響應函數

步驟:

1 聲明一個菜單:

    CMenu menu;

2 產生菜單對象:  

    menu.CreatePopupMenu();

3 給菜單添加上內容:

   menu.AppendMenu(MF_STRING,WM_CLEARHOSTS,"清除HOSTS");

AppendMenu函數具體的意義可以查看MSDN,其中WM_CLEARHOSTS為自訂的一個訊息,最後一個參數為菜單的text,點擊這個菜單就可以調用WM_CLEARHOSTS訊息的處理函數。

4 添加子快顯功能表:

    CMenu submenu;

    submenu.CreatePopupMenu();

    menu.AppendMenu(MF_POPUP,(UINT_PTR)(submenu.m_hMenu),"sub");

5 設定當失去焦點時菜單自動消失

    SetForegroundWindow();

6 設定菜單的位置:

    menu.TrackPopupMenu();

以上各步串連起來就是一個完整的動態產生菜單的步驟,當動態產生的菜單很多且菜單又不固定的時候,預先

為每個菜單都定義一個訊息和訊息處理函數是很麻煩且不現實的,現在介紹一種方法來動態響應動態產生的菜單。

其原理就是利用OnCommand函數。

首先,要為每一個動態產生的菜單指定一個ID,方式如下

    menu.AppendMenu(MF_STRING,ID,"yourMenuName");

其中參數ID為一個唯一的整數,可以由你自己指定,當按一下滑鼠此菜單的時候,系統發送一個訊息,此訊息優先

被OnCommand函數接收,OnCommand函數的原形為:

BOOL OnCommand(WPARAM wParam, LPARAM lParam);

假如你指定菜單的ID為10001,響應函數的具體寫法為:

BOOL OnCommand(WPARAM wParam, LPARAM lParam)

{
    int menuID = LOWORD(wParam);
    if(menuID > 10000)
    {
      //添加你自己的處理代碼
    }
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.