我正在编写一个 MFC CEdit 派生控件,一旦控件的 m_hwnd 被填充,我需要添加初始化代码。
我可以覆盖哪个函数或者我可以处理哪个消息来实现这一点?
我尝试使用 OnCreate,但它似乎只适用于对话框
编辑:我正在初始化的是编辑的提示横幅
谢谢
我正在编写一个 MFC CEdit 派生控件,一旦控件的 m_hwnd 被填充,我需要添加初始化代码。
我可以覆盖哪个函数或者我可以处理哪个消息来实现这一点?
我尝试使用 OnCreate,但它似乎只适用于对话框
编辑:我正在初始化的是编辑的提示横幅
谢谢
按照 Mark Ransom 的提示,我终于找到了一个更好的函数来实现我的初始化。虽然重载 CWnd::SubclassWindow 是个好主意,但这个函数不是虚拟的,它需要从子类指针调用。从 CWnd* 调用 SubclassWindow 将不起作用。
我找到了函数CWnd::PreSubclassWindow。它是虚拟的,在 SubclassWindow 之前被调用。由于 m_hwnd 在那里有效,因此这是编写我需要的代码的好地方。另外,这个函数是虚函数,由框架自动调用,所以我不用担心有好的指针类型
如果控件位于对话框上,则 OnCreate 不起作用,因为控件是在将其子类化为窗口类之前创建的 - 这发生在对话框的 DoDataExchange 中。
您可以覆盖 CWnd::SubclassWindow 并在您自己的代码之前调用基本方法。
根据您正在初始化的具体内容,您可以覆盖OnPaint()
,或者您可以将初始化代码添加到OnInitDialog()
包含控件的 Dialog 类中。