02月15, 2007

VC中响应未定义的消息

问题: 在MFC程序中需要响应显示器分辨率变化

分析: 如果分辨率变化会产生消息并发送给所有程序,那么只要响应该消息就可以了

解决: 通过在winuser.h中搜索DISPLAY找到

#define WM_DISPLAYCHANGE                 0x007E

由于VC的ClassWizard无法自动生成响应处理该消息的成员函数, 所以要手工增加消息映射

在afxmsg_.h中找到

#define ON_MESSAGE(message, memberFxn) 
{ message, 0, 0, 0, AfxSig_lwl, 
   (AFX_PMSG)(AFX_PMSGW) 
   (static_cast< LRESULT (AFX_MSG_CALL CWnd::*)(WPARAM, LPARAM) > 
   (memberFxn)) },

所以可以在相应的类中增加消息映射和函数:

函数:

// Generated message map functions
//{{AFX_MSG(CNuTsWMDlg)
virtual BOOL OnInitDialog();
...
afx_msg void OnDislayChanged(WPARAM wParam,LPARAM lParam);
...
//}}AFX_MSG
DECLARE_MESSAGE_MAP()

消息映射: ``c++ BEGIN_MESSAGE_MAP(CNuTsWMDlg, CDialog) //{{AFX_MSG_MAP(CNuTsWMDlg) ... ON_MESSAGE(WM_DISPLAYCHANGE,OnDislayChanged) ... //}}AFX_MSG_MAP END_MESSAGE_MAP() ```

本文链接:http://aztack.wang/post/handle-none-predefined-message-in-vc.html

-- EOF--

Comments

评论加载中...

注:如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理。