我使用vc6.0中文版,是菜鸟
用MFC(exe)向导,
编写一个基于对话框的程序CTestDialog
当我想在WM_ERASEBKGND消息里面作点处理的时候,意外地发现Ctrl+W后,根本没有WM_ERASEBKGND消息
于是
我在TestDialog.cpp文件中找到
BEGIN_MESSAGE_MAP(CTestDialogDlg, CDialog)
//{{AFX_MSG_MAP(CTestDialogDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()

ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDOPEN, OnOpen)
ON_WM_HSCROLL()
ON_WM_VSCROLL()
ON_WM_ERASEBKGND()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
如上所示,最后一行加了一个ON_WM_ERASEBKGND()
然后到TestDialog.h中
找到
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
afx_msg void OnOpen();
afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
 afx_msg BOOL OnEraseBkgnd(CDC* pDC);
如上所示,加了一行afx_msg BOOL OnEraseBkgnd(CDC* pDC)
再回到TestDialog.cpp文件
在页面的最底端加上下边的函数
BOOL CScrollBitmapDlg::OnEraseBkgnd (CDC* pDC)
{
//some code
}
一切搞定,就可以重新Ctrl +W了,找到了WM_ERASEBKGND消息的映射,而且程序工作正常。
我想问的是:
1,为什么没有WM_ERASEBKGND消息?
2,我的做法有没有疏漏?
3,还有没有更加简便的添加这个消息映射的方法?给我一个详细解释?

解决方案 »

  1.   

    更改class wizard的最后一个class info里的message filter
      

  2.   

    有WM_ERASEBKGND消息的
    Ctrl+W 后,在最后一个选项卡Class Info里的Message filter的下拉列表选window 后再回到你的消息列表里就有了WM_ERASEBKGND消息
      

  3.   

    如楼上所说,你的手动添加的方法也是可以的,但是添加的时候要注意重载函数OnEraseBkgnd的类型和参数不要弄错。
      

  4.   

    谢谢,我明白了,更改filter就行了。