系统菜单编程

系统菜单编程

ID:41033565

大小:90.00 KB

页数:5页

时间:2019-08-14

系统菜单编程_第1页
系统菜单编程_第2页
系统菜单编程_第3页
系统菜单编程_第4页
系统菜单编程_第5页
资源描述:

《系统菜单编程》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、系统菜单系统菜单是每个Windows程序的标准特性。通常系统菜单由Windows系统来管理,所以我们平时写程序时很少去碰它。但是,有的时候,我们确实想定制自己的系统菜单项。这样就涉及到定制菜单的处理问题,因为Windows无法自动处理我们定制的系统菜单。而且,系统菜单的处理方式与常规的菜单处理是不同的。添加菜单项首先在资源定义文件resource.h中定义菜单项标识,也可以在标准头文件中定义。菜单项标识必须具有唯一性。其次,Windows对系统菜单的处理与常规菜单的处理方法是不同的,不管是缺省的

2、菜单还是定制的菜单,它们都没有像常规菜单命令那样的消息处理例程。假设我们要添加两个定制的系统单:#defineIDM_EXIT0x0020添加菜单项的命令是在对话框的初始化例程以及窗口创建函数(OnInitDialog(),OnCreate())中进行的。如:BOOLCBabelOnDlg::OnInitDialog(){CDialog::OnInitDialog();//在系统菜单中添加"退出"菜单项//解决Windows95中的bugASSERT((IDM_EXIT&0xFFF0)==IDM

3、_EXIT);//命令ID必须在预定义的系统菜单之后ASSERT(IDM_EXIT<0xF000);CMenu*pSysMenu=GetSystemMenu(false);if(pSysMenu!=NULL){pSysMenu->AppendMenu(MF_STRING,IDM_EXIT,"退出(&x)");}//otherinitialization}这里在添加每个菜单前都有两个ASSERT语句,第一个ASSERT的目的是修复Windows95中存在的Bug,第二个ASSERT保证定制的命令I

4、D是在预定义的系统菜单之后,以免发生冲突。查一下MSDN库的MFC文档关于系统菜单的描述,你会发现下面的内容:“......所有预定义的控制菜单项(也就是系统菜单)的ID号必须大于0xF000。如果某个应用程序要添加系统菜单,其系统菜单的ID号必须小于F000。”接下来,用GetSystemMenu函数获取系统菜单指针。调用时使用参数false获取指针。如果用true作为参数,那么该函数会将菜单重置回缺省状态。如果得到的指针有效,接着调用菜单添加命令在系统菜单后面添加菜单项,传递菜单ID以及菜单

5、显示时所用的字符串。处理定制的系统菜单命令   为了让这些系统菜单命令工作起来,我们不能依赖常规的菜单消息处理机制----即便菜单项相同。通常系统菜单通过WM_SYSCOMMAND消息处理:voidCBabelOnDlg::OnSysCommand(UINTnID,LPARAMlParam){//trapourownsystemmenumessagesif((nID&0xFFF0)==IDM_ABOUTBOX){CAboutDlgdlgAbout;dlgAbout.DoModal();}else

6、if((nID&0xFFF0)==SC_CLOSE){OnClose();}elseif((nID&0xFFF0)==IDM_EXIT){AfxMessageBox(_T("您已经退出了系统!"));}else{CDialog::OnSysCommand(nID,lParam);}}通过比较传入的菜单ID进行相应的处理。注意代码中又有两个“nID&0xFFF0”,这主要也是解决Windows95的bug。如果选择“退出”,那么会弹出"您已经退出了系统!"注意第一个条件检查:SC_CLOSE是个预

7、定义的菜单常量。一般它是由Windows处理的。如果传入的菜单ID不等于任何定制的菜单项,那么就让Windows对它进行默认处理:CDialog::OnSysCommand(nID,lParam);下面是几个最常用的系统菜单命令: 菜单说明SC_CLOSE关闭CWnd对象SC_MAXIMIZE或者SC_ZOOM最大化CWnd对象SC_MINIMIZE或者SC_ICON最小化CWnd对象SC_MOVE移动CWnd对象SC_RESTORE恢复窗口的正常位置和大小SC_SIZE改变CWnd对象大小其它

8、的几个系统菜单命令一般都是在特殊情况下才使用,有关细节请参考有关WM_SYSCOMMAND的文档。修改现有的菜单命令我们已经看到,系统菜单本身默认的处理行为是可以改变的,除此之外,系统菜单项的描述文本也是可以改变的,甚至还可以删除它们。为了修改菜单命令的描述文本,我们可以用pSysMenu指针调用ModifyMenu()函数。例如,如果想要把“关闭”菜单项改成“隐藏”,可以象下面这么做:在OnInitDialog()中加入如下语句:pSysMenu->ModifyMenu(SC_CLOSE,MF

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。