现在的位置: 首页 > 综合 > 正文

WM5.0中添加弹出菜单(即上下文菜单)

2013年09月10日 ⁄ 综合 ⁄ 共 2094字 ⁄ 字号 评论关闭

今天想弄个就想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;
}

【上篇】
【下篇】

抱歉!评论已关闭.