我自己从CStatic派生一个类,响应WM_CREATE、WM_SIZE等消息,不会成功被调用,为何?
BEGIN_MESSAGE_MAP(CMyStatic, CStatic)
//{{AFX_MSG_MAP(CLabelEx)
ON_WM_PAINT()
ON_WM_MOUSEMOVE()
ON_WM_LBUTTONDOWN()
ON_WM_CREATE()  //---->
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
//在对话框中,使用该类连接CStatic控件,该响应函数不会被调用,为何?
int CMyStaticx::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
TRACE0("CMyStatic::OnCreate\n");   
if (CStatic::OnCreate(lpCreateStruct) == -1)
return -1;

// TODO: Add your specialized creation code here

return 0;
}在对话框中的控件创建时引发的WM_CREATE消息怎么我们自己不能得到呢?

解决方案 »

  1.   

    这是常见的对话框消息无响应问题。你必须重载对话框的PreTranslateMessage函数,把消息SendMessage到目标控件上。
      

  2.   

    MFC的对话框的创建过程中,为何不让其中的控件自己响应这些消息,有什么更简单的方法得到响应吗?
      

  3.   

    把CStatic的ID改一个值
    默认IDC_STATIC是不会处理消息映射的
      

  4.   

    CStatic的ID已经改过的!我按danyueer(淡月儿:清水上的足音) 的做法做了,如下:
    BOOL CTestDlg::PreTranslateMessage(MSG* pMsg) 
    {// TODO: Add your specialized code here and/or call the base class
        if (pMsg->message == WM_CREATE ) 
        { //我调试了,不会进入这里啊????
    if ( pMsg->hwnd == m_MyStatic.GetSafeHwnd() )
    {
    m_MyStatic.SendMessage(pMsg->message, pMsg->wParam, pMsg->lParam);
    return TRUE;
    }
        } 
    return CDialog::PreTranslateMessage(pMsg);
    }
      

  5.   

    对话框静态模板上的控件创建的过程稍有不同,它的OnCreate消息将由对话框处理。
    你动态创建的话,就可以响应了。