我从CEdit中派生出一个CMyEdit类,并用这个类去关联了一个对话框中的edit控件,
但我在CMyEdit类中,怎么也捕捉不到WM_CREATE消息,即OnCreate这个函数一次也不执行,
不知道这是什么原因?

解决方案 »

  1.   

    动态创建Create你的CMyEdit对象就可以了,不要直接用你的对象静态关联资源编辑器上的Edit控件
    CMyEdit m_edit;
    m_edit.Create(...);
      

  2.   

    静态的关联资源,为什么捕抓不到WM_CREATE消息呢?
      

  3.   

    下面这个加了吗?BEGIN_MESSAGE_MAP( CMyEdit, CEdit)
    ON_WM_CREATE()
    END_MESSAGE_MAP()
      

  4.   

    默认的控件,你绑定的时候,系统会帮你创建:
    DDX_Control(pDX, IDC_xxx, m_...);你自己定义的,不会。你可以先定义一个CMyEdit m_MyEdit变量,
    然后:m_MyEdit.SubClassDlgItem(IDC_XXXX);
      

  5.   

    不会啊,我看了下,自动创建了 DDX_Control(pDX,IDC_EDIT,m_CtrlEdit)的。
      

  6.   


    m_MyEdit.SubClassDlgItem(IDC_XXXX);
    通过这种方式依然捕捉不到WM_CREATE消息。
    不过我有点明白了其中的原因,
    通过资源关联或是这种子类化控件来控制消息流的方法,都应该是MFC的application framework 通过某种方法在“窗口”创建完成之后,才将消息导入新建的类中的,而这时候已经创建完成,自然就不能再捕捉到WM_CREATE消息。至于消息是一种怎么样的过程,还要研究研究。
    还望知道的高手指教!!!
      

  7.   

    在PreSubclassWindow处理你要做的操作就行了.
      

  8.   

    原因就是LZ说的,解决方法是重载 SubClassDlgItem
      

  9.   

    PreSubclassWindow正解。在对话框上的控件,是CDialog创建出来的。你在CDialog派生类的OnCreate中处理时,已经创建好了。所以截获不到,只有用PreSubclassWindow或者用Hook可以截获到WM_CREATE.