6

我正在编写一个 MFC CEdit 派生控件,一旦控件的 m_hwnd 被填充,我需要添加初始化代码。

我可以覆盖哪个函数或者我可以处理哪个消息来实现这一点?

我尝试使用 OnCreate,但它似乎只适用于对话框

编辑:我正在初始化的是编辑的提示横幅

谢谢

4

3 回答 3

7

按照 Mark Ransom 的提示,我终于找到了一个更好的函数来实现我的初始化。虽然重载 CWnd::SubclassWindow 是个好主意,但这个函数不是虚拟的,它需要从子类指针调用。从 CWnd* 调用 SubclassWindow 将不起作用。

我找到了函数CWnd::PreSubclassWindow。它是虚拟的,在 SubclassWindow 之前被调用。由于 m_hwnd 在那里有效,因此这是编写我需要的代码的好地方。另外,这个函数是虚函数,由框架自动调用,所以我不用担心有好的指针类型

于 2012-07-17T13:32:38.263 回答
5

如果控件位于对话框上,则 OnCreate 不起作用,因为控件是在将其子类化为窗口类之前创建的 - 这发生在对话框的 DoDataExchange 中。

您可以覆盖 CWnd::SubclassWindow 并在您自己的代码之前调用基本方法。

于 2012-07-13T15:16:31.823 回答
0

根据您正在初始化的具体内容,您可以覆盖OnPaint(),或者您可以将初始化代码添加到OnInitDialog()包含控件的 Dialog 类中。

于 2012-07-13T15:16:05.977 回答