WM5.0中添加快顯功能表(即操作功能表)

來源:互聯網
上載者:User

今天想弄個就想XP裡的點擊右鍵出現菜單的樣式,當然在PDA上是只能點擊了,我選擇點擊時出現快顯功能表,同時給予響應。

首先建個基於對話方塊的MFC的智慧型裝置程式,從VS2005的表單訊息裡選擇WM_LBYTTONDOWN這個訊息

選擇好後就是要引入快顯功能表啦。代碼如下:

void CTestMenuDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
 int x = point.x;
 int y = point.y;   

HMENU hMainMenu; 

hMenu = CreatePopupMenu ();
 AppendMenu (hMenu, MF_STRING | MF_ENABLED, ID_NEW, TEXT ("&New"));
 AppendMenu (hMenu, MF_STRING | MF_ENABLED, ID_OPEN, TEXT ("&Open"));
 AppendMenu (hMenu, MF_STRING | MF_ENABLED, ID_SAVE, TEXT ("&Save"));
 AppendMenu (hMenu, MF_STRING | MF_ENABLED, ID_EXIT, TEXT ("E&xit"));

TrackPopupMenuEx(hMenu,TPM_LEFTALIGN,x,y,m_hWnd,NULL);//彈出的菜單跟隨點擊的地方移動

 CDialog::OnLButtonDown(nFlags, point);
}

我將ID_NEW、ID_OPEN、 ID_SAVE、ID_EXIT這四個控制項的ID寫到了Resourceppc.h這個源檔案中了,形式為

#define ID_NEW                        100
#define ID_OPEN                        101
#define ID_SAVE                        102
#define ID_EXIT                        103

當然這四個ID你可以隨便取,記住申明的數字要連續。

添加現在就完成了,下一步就要實現點擊這個快顯功能表的時候可以實現一些操作了,這個東西我找了半天沒辦法解決,我就想到了暴力解決的方法,學著菜單通過類嚮導自動產生的方法來解決:

1.在所在的對話方塊的標頭檔裡寫afx_msg void On100();學系統自動產生的那種定義

2.在以下這段代碼中添加你的菜單的訊息,具體我也說不上來,反正我感覺就這樣做

BEGIN_MESSAGE_MAP(CTestMenuDlg, CDialog)
#if defined(_DEVICE_RESOLUTION_AWARE) && !defined(WIN32_PLATFORM_WFSP)
 ON_WM_SIZE()
#endif
 //}}AFX_MSG_MAP
 ON_WM_LBUTTONDOWN()
  ON_COMMAND(ID_NEW, &CTestMenuDlg::On100)//就是這個
END_MESSAGE_MAP()

3.在CPP檔案裡寫這個方法,這樣你的快顯功能表就有用了,你可以在下面這個方法裡寫你想要的操作了。

void CTestMenuDlg::On100()
{
 MessageBox(L"100", L"Popup Menu Alert",MB_OK);
}

4.如果你想在CListrctrl裡點擊某一列的時候出現菜單時,可以在LIST控制項的單擊事件裡這麼寫:

void CTestMenuDlg::OnNMClickList1(NMHDR *pNMHDR, LRESULT *pResult)
{
 NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
 if(pNMListView->iItem != -1)
 {
        DWORD dwPos = GetMessagePos();
        CPoint point( LOWORD(dwPos), HIWORD(dwPos) );

         HWND hwnd;

         hMainMenu = CreateMenu ();
         hMenu = CreatePopupMenu ();
         AppendMenu (hMenu, MF_STRING | MF_ENABLED, ID_NEW, TEXT ("&New"));
         AppendMenu (hMenu, MF_STRING | MF_ENABLED, ID_OPEN, TEXT ("&Open"));
         AppendMenu (hMenu, MF_STRING | MF_ENABLED, ID_SAVE, TEXT ("&Save"));
         AppendMenu (hMenu, MF_STRING | MF_ENABLED, ID_EXIT, TEXT ("E&xit"));;
         TrackPopupMenuEx(hMenu,TPM_LEFTALIGN,point.x,point.y,m_hWnd,NULL);
 }
 *pResult = 0;
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.