VC 创建弹出式菜单

来源:互联网 发布:phantomjs python 编辑:程序博客网 时间:2024/06/05 04:24

步骤:

(1) 创建一个基于对话框的应用程序

(2)在工作区选择资源视图,插入一个菜单资源,添加菜单项

(3)在对话框的头文件中声明一个CMenu类对象m_Menu

(4)在OnInitDialog方法中调用LoadMenu方法加载菜单资源

m_Menu.LoadMenuW(IDR_MENU1);//加载菜单资源
(5)在工作区窗口选择类视图,右击CXXXDlg节点,选择类向导,在弹出的对话框中选择消息,WM_RBUTTONUP事件,改事件在右键抬起时触发

(6)处理鼠标右键抬起时的事件处理函数

void CMy82Dlg::OnRButtonUp(UINT nFlags, CPoint point){// TODO: 在此添加消息处理程序代码和/或调用默认值CMenu *pMenu = m_Menu.GetSubMenu(0);//获得菜单句柄CRect rect;ClientToScreen(&point);//将客户坐标转换为屏幕坐标rect.top = point.x;//将鼠标当前横坐标作为弹出菜单的左上角坐标rect.left = point.y;//将鼠标当前纵坐标作为弹出菜单的左上角坐标pMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON|TPM_VERTICAL,rect.top,rect.left,this,&rect);//显示弹出菜单CDialogEx::OnRButtonUp(nFlags, point);}

注意在显示弹出菜单时,使用ClientToScreen函数进行转换,否则弹出菜单的位置可能出错.

效果如下:

用到的函数:

LoadMenu方法:

语法格式如下

BOOL LoadMenu(LPCTSTR lpszResourceName);

BOOL LoadMenu(UINT nIDResource);

lpszResourceName:标识资源名称

 nIDResource: 标识资源ID

GetSubMenu方法获得弹出式菜单第一个项

CMenu* GetSubMenu(int nPos) const;

nPos:标识菜单位置,第一个菜单项对应的位置是0,第2个菜单项的对应位置是1,依次类推.

TrackPopupMenu方法

语法格式如下:

BOOL TrackPopupMenu(UINT nFlags, int x, int y,CWnd* pWnd, LPCRECT lpRect = 0);

nFlags:屏幕标记和鼠标按钮标记

x:以屏幕坐标标识弹出菜单式菜单的水平坐标

y:以屏幕坐标标识弹出菜单式菜单的水平坐标

pWnd:标识弹出式菜单的所有者

IpRect:以屏幕坐标表示用户在菜单中的单击区域,如果为NULL,当用户单击弹出式菜单之外的区域,将释放菜单窗口

nFlags的可选值

定位快捷菜单中的水平位置:

TPM_CENTERALIGN  中心由x参数指定的坐标水平相对快捷菜单

TPM_LEFTALIGN    定位快捷菜单,以便其左侧参数指定的坐标对齐

TPM_RIGHTALIGN   参数指定的快捷菜单,以便其右侧对齐。

定位快捷菜单垂直位置:

TPM_BOTTOMALIGN  位置的快捷菜单中,其底部的参数y指定的坐标对齐。

TPM_TOPALIGN  位置的快捷菜单,以便其顶侧的参数y指定的坐标对齐

TPM_VCENTERALIGN  中心 y所指定的坐标垂直的快捷菜单

使用下列标志指定的鼠标按钮的快捷菜单轨道。

TPM_LEFTBUTTON 用户可以选择菜单项,用鼠标左键。

TPM_RIGHTBUTTON 用户可以选择左,右鼠标按钮的菜单项。

原创粉丝点击