你是否正在寻找关于trackpopupmenu的内容?让我把最受欢迎的东西奉献给你:

trackpopupmenu函数与鼠标右键弹出菜单 2007-02-19 18:32:44
分类:
利用调用trackpopupmenu函数,手工添加弹出菜单:
1)用资源管理器添加一个菜单资源
2)在鼠标右键消息响应函数中,加载菜单资源,并获得要显示的子菜单指针,并用该指针调用TrackPopupMenu函数便完成任务(但要注意:鼠标响应函数传进来的坐标是客户区坐标,而TrackPopupMenu函数中使用的是屏幕坐标,在调用trackpopupmenu前要调用ClientToScreen客户区坐标到屏幕坐标的转换)
事例代码:
CMenu menu;
menu.LoadMenu(IDR_MENU1);
CMenu *pPopup=menu.GetSubMenu(0);
ClientToScreen(&point);
pPopup->trackpopupmenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y,this);
说明:
CWnd::ClientToScreen(..);//将一个坐标点或一个矩形区域坐标转换成屏幕坐标。
CMenu::trackpopupmenu(..);//在指定位置以指定的方式显示弹出菜单,。
CWnd::ScreenToClient(..);
//Converts the screen coordinates of a given point or rectangle on the display to client coordinates.
还有下面一种办法
利用已有的菜单资源,这样可以共享命令事件。假如你有两个菜单项,其ID是ID_VIEW_LARGE_IMAGE,ID_VIEW_SMALL_INAGE.可以这样来做:
CMenu m_PopupMenu;
m_PopupMenu.CreatePopupMenu();
m_PopuoMenu.AppendMenu(MF_STRING,ID_VIEW_LARGE_IMAGE,....);
m_PopupMenu.AppendMenu(MF_STRING,ID_VIEW_SMALL_IMAGE,....);
//在这里一定要将客户区坐标转成屏幕坐标,利用函数ClientToScreen(...);
ClientToScreen(&point); //point可以从鼠标右键消息响应函数中取到。
//也可以通过GetCursorPos(...)函数取到。
m_PopupMenu.trackpopupmenu(TPM_LEFTALIGN,point.x,point.y,this);
阅读(5890) | 评论(0) | 转发(0) |
0
上一篇:overlapped I/O 重叠结构 三
下一篇:上下五千年,大梦无边
相关热门文章
以上就是关于trackpopupmenu的全部内容,相信你一定会非常满意。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shenmilingyu/article-10948-1.html
不清楚生产环境和流程
巴菲特呢