我在哪里可以放置我的MFC控件初始化代码

时间:2012-07-13 15:09:50

标签: c++ user-interface mfc custom-controls

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

我可以覆盖哪个功能或者我可以处理哪个消息来实现此目的?

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

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

由于

3 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:5)

如果控件在对话框上,OnCreate不起作用,因为控件是在它可以被子类化到窗口类之前创建的 - 这发生在对话框的DoDataExchange中。

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

答案 2 :(得分:0)

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