今天发现程序未显示About Box,分析发现,是因为程序未处理WM_SYSCOMMAND命令导致;但VC的ClassView里好像不能直接处理该消息;只好手动添加. 记录下方法和需要注意的地方。
处理MFC的ClassView中没有定义的消息需要注意三个地方,如WM_SYSCOMMAND消息,可以接收系统菜单命令,但ClassView中没有,这时需要自己手动添加。
一、在dialog的cpp中添加MessageMap:
在BEGIN_MESSAGE_MAP(CTestDlg, CDialog)和END_MESSAGE_MAP()宏命令之间,加入:
- ON_WM_SYSCOMMAND()
二、在dialog的头文件中添加消息处理函数定义:
在// Generated message map functions
//{{AFX_MSG(CTestDlg)
和//}}AFX_MSG
DECLARE_MESSAGE_MAP() 之间加入:
- afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
三、在dialog的cpp文件中添加消息处理函数体:
- void CTestDlg::OnSysCommand(UINT nID, LPARAM lParam)
- {
- if ((nID & 0xFFF0) == IDM_ABOUTBOX)
- {
- CAboutDlg dlgAbout;
- dlgAbout.DoModal();
- }
- else
- {
- CDialog::OnSysCommand(nID, lParam);
- }
- }
若不添加第一步,编译不会出错,也可以运行,但不会获取对WM_SYSCOMMAND消息的处理权。
添加完成后再打开ClassView可以看到该消息及处理函数已经列出来了。
另外,实际上自定义消息的处理和这个基本上差不多。
写作匆忙,欢迎大虾们指导、斧正!boythl#163.com
===================================
非注明转载的文章和blog在未特殊声明情况下一般为本人原创或整理,
原创文章版权本人(lonefox)所有;转载文章版权归原作者所有;
欢迎转载,但请注明出处,保留作者和版权信息。
===================================