VC6中添加消息映射

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/boythl/article/details/2968816

   今天发现程序未显示About Box,分析发现,是因为程序未处理WM_SYSCOMMAND命令导致;但VC的ClassView里好像不能直接处理该消息;只好手动添加. 记录下方法和需要注意的地方。

 

   处理MFC的ClassView中没有定义的消息需要注意三个地方,如WM_SYSCOMMAND消息,可以接收系统菜单命令,但ClassView中没有,这时需要自己手动添加。
  

    一、在dialog的cpp中添加MessageMap:
   在BEGIN_MESSAGE_MAP(CTestDlg, CDialog)和END_MESSAGE_MAP()宏命令之间,加入: 

  1. ON_WM_SYSCOMMAND()

   二、在dialog的头文件中添加消息处理函数定义:
   在// Generated message map functions
      //{{AFX_MSG(CTestDlg)
  和//}}AFX_MSG
 DECLARE_MESSAGE_MAP() 之间加入:

  1.  afx_msg void OnSysCommand(UINT nID, LPARAM lParam);

   三、在dialog的cpp文件中添加消息处理函数体:

  1. void CTestDlg::OnSysCommand(UINT nID, LPARAM lParam)
  2. {
  3.     if ((nID & 0xFFF0) == IDM_ABOUTBOX)
  4.     {
  5.         CAboutDlg dlgAbout;
  6.         dlgAbout.DoModal();
  7.     }
  8.     else
  9.     {
  10.         CDialog::OnSysCommand(nID, lParam);
  11.     }
  12. }

   若不添加第一步,编译不会出错,也可以运行,但不会获取对WM_SYSCOMMAND消息的处理权。

 

   添加完成后再打开ClassView可以看到该消息及处理函数已经列出来了。

 

   另外,实际上自定义消息的处理和这个基本上差不多。

   写作匆忙,欢迎大虾们指导、斧正!boythl#163.com

 

===================================

非注明转载的文章和blog在未特殊声明情况下一般为本人原创或整理,
原创文章版权本人(lonefox)所有;转载文章版权归原作者所有;

http://blog.csdn.net/boythl

欢迎转载,但请注明出处,保留作者和版权信息。

===================================

展开阅读全文

没有更多推荐了,返回首页