WM_CREATE消息捕抓不到?

__Silent 2010-10-12 10:53:02
我从CEdit中派生出一个CMyEdit类,并用这个类去关联了一个对话框中的edit控件,
但我在CMyEdit类中,怎么也捕捉不到WM_CREATE消息,即OnCreate这个函数一次也不执行,
不知道这是什么原因?
...全文
249 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
psbeond 2010-10-13
  • 打赏
  • 举报
回复
PreSubclassWindow正解。在对话框上的控件,是CDialog创建出来的。你在CDialog派生类的OnCreate中处理时,已经创建好了。所以截获不到,只有用PreSubclassWindow或者用Hook可以截获到WM_CREATE.
__Silent 2010-10-12
  • 打赏
  • 举报
回复
当然加啦
sea_zs 2010-10-12
  • 打赏
  • 举报
回复
下面这个加了吗?

BEGIN_MESSAGE_MAP( CMyEdit, CEdit)
ON_WM_CREATE()
END_MESSAGE_MAP()
__Silent 2010-10-12
  • 打赏
  • 举报
回复
静态的关联资源,为什么捕抓不到WM_CREATE消息呢?
Eleven 2010-10-12
  • 打赏
  • 举报
回复
[Quote=引用楼主 wuyan6293 的回复:]
我从CEdit中派生出一个CMyEdit类,并用这个类去关联了一个对话框中的edit控件,
但我在CMyEdit类中,怎么也捕捉不到WM_CREATE消息,即OnCreate这个函数一次也不执行,
不知道这是什么原因?
[/Quote]
动态创建Create你的CMyEdit对象就可以了,不要直接用你的对象静态关联资源编辑器上的Edit控件
CMyEdit m_edit;
m_edit.Create(...);
weiym 2010-10-12
  • 打赏
  • 举报
回复
原因就是LZ说的,解决方法是重载 SubClassDlgItem
zyq5945 2010-10-12
  • 打赏
  • 举报
回复
在PreSubclassWindow处理你要做的操作就行了.
__Silent 2010-10-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 flydreamgg 的回复:]
默认的控件,你绑定的时候,系统会帮你创建:
DDX_Control(pDX, IDC_xxx, m_...);

你自己定义的,不会。

你可以先定义一个CMyEdit m_MyEdit变量,
然后:

m_MyEdit.SubClassDlgItem(IDC_XXXX);
[/Quote]

m_MyEdit.SubClassDlgItem(IDC_XXXX);
通过这种方式依然捕捉不到WM_CREATE消息。
不过我有点明白了其中的原因,
通过资源关联或是这种子类化控件来控制消息流的方法,都应该是MFC的application framework 通过某种方法在“窗口”创建完成之后,才将消息导入新建的类中的,而这时候已经创建完成,自然就不能再捕捉到WM_CREATE消息。至于消息是一种怎么样的过程,还要研究研究。
还望知道的高手指教!!!
__Silent 2010-10-12
  • 打赏
  • 举报
回复
不会啊,我看了下,自动创建了 DDX_Control(pDX,IDC_EDIT,m_CtrlEdit)的。
昨夜无风 2010-10-12
  • 打赏
  • 举报
回复
默认的控件,你绑定的时候,系统会帮你创建:
DDX_Control(pDX, IDC_xxx, m_...);

你自己定义的,不会。

你可以先定义一个CMyEdit m_MyEdit变量,
然后:

m_MyEdit.SubClassDlgItem(IDC_XXXX);
__Silent 2010-10-12
  • 打赏
  • 举报
回复
不要沉了我的贴,继续请教。。。。。。