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