最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
HowTo:加入弹出式菜单
时间:2008-04-26 编辑:简简单单 来源:一聚教程网
Visual C++ 6.0
WindowsXP
MFC
Dialog-Based Application
1. 声明一个CMenu类型的变量,如下:
CMenu popmenu;
2. 调用CMenu:: CreatePopupMenu()函数
popmenu.CreatePopupMenu();
3. 然后在resouce.h文件中,定义
#define ID_MENUITEM_HELLO 32772
需要注意的是,最好将resouce.h文件中“Next default values for new objects”预定义block中的_APS_NEXT_COMMAND_VALUE的值修改为32772+1,即32773,
#define _APS_NEXT_COMMAND_VALUE 32773
因为这可能会在使用Wizard自动生成代码是造成代号冲突。
4. 然后调用CMenu::AppendMenu(), 向Menu里加菜单项
popmenu.AppendMenu(MF_STRING, ID_MENUITEM_HELLO, "Hello world");
MF_STRING是指菜单项用字符串表述,字符串内容为参数3。
ID_MENUITEM_HELLO是在resouce.h文件中定义的资源代码。
”Hello world!”是将显示在菜单中的字符串。
5. 在Dialog声明中加入对应的command handler
afx_msg void OnMenuitemHELLO();
在implement中加入定义
void CXXXDlg::OnMenuitemHELLO()
{
SetWindowText("Hello world");
}
6. 因为我们实现用户右击鼠标弹出菜单,所以加入消息WM_ RBUTTONDOWN的handler,并在handler中调用CMenu:: TrackPopupMenu(…)函数:
void CXXXDlg::OnRButtonDown(UINT nFlags, CPoint point)
{
CRect rect;
GetWindowRect(&rect);
popmenu.TrackPopupMenu(TPM_LEFTALIGN, point.x + rect.TopLeft().x, point.y+rect.TopLeft().y, this/*, &rect*/);
CDialog::OnRButtonDown(nFlags, point);
}
这里值得注意的是,CWnd响应WM_RBUTTONDOWN所返回的的CPoint参数的x和y对应的是其对应窗体的左上角为原点的坐标系,而TrackPopupMenu函数中x,y则对应的是整个屏幕左上角为原点的坐标系,因此这里需要转换。
7. 编译运行,当我们点选弹出菜单的“Hello world”项目后,对话框Caption栏被修改为“Hello world”。
完(workbook)
-
上一个: 特殊服务的"注册表入口"
相关文章
- 一个不错竖向三级弹出菜单特效代码 07-22
- 仿智联招聘上弹出选择菜单效果 09-21
- 右键弹出菜单 06-08
- 利用Dreamweaver mx自带的行为制作弹出菜单 04-25
- 用Dm中自带的行为制作弹出菜单 04-25
- 163博客弹出popup菜单 04-23