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