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()
“`

Leave a Reply

Your email address will not be published. Required fields are marked *

Scroll to top