MFC:创建控件后的通知

MFC:创建控件后的通知,mfc,controls,Mfc,Controls,我是MFC的新手。我选择通过VS2017中的向导创建一个office风格的MFC应用程序。现在我想扩展CMFCShellTreeCtrl,所以我创建了另一个类,将其作为基类。基本的都很好。我的问题是,我想做如下事情: whatever MyClass::FuncitonCalledAfterControlCreated(...) { SetFlags(GetFlags() | SHCONTF_NONFOLDERS); ModifyStyle(0x0, TVS_CHECKBOXES); }

我是MFC的新手。我选择通过VS2017中的向导创建一个office风格的MFC应用程序。现在我想扩展CMFCShellTreeCtrl,所以我创建了另一个类,将其作为基类。基本的都很好。我的问题是,我想做如下事情:

whatever MyClass::FuncitonCalledAfterControlCreated(...)
{
  SetFlags(GetFlags() | SHCONTF_NONFOLDERS);
  ModifyStyle(0x0, TVS_CHECKBOXES);
}
但我很难确定要覆盖哪个虚拟函数,或者我应该做一个消息映射的事情吗?我猜不管是什么,所有的控制都是一样的?不管怎样,合适的功能是什么


蒂娅

如果控制源于
CWnd
a
WM_CREATE
,则会发出一个
WM_CREATE
,可通过以下消息映射定向到控制:

ON\u WM\u CREATE()

和成员职能:

afx_msg int OnCreate(LPCREATESTRUCT LPCREATESTRUCT)


如果在对话框资源上,WM_创建将不会发生。有人说您可以使用
PRESSBClassWindow
,但在测试
Create()
的情况下,该调用在
CreateWindowEx
调用之前,因此不适用于设置TVS\U复选框样式。我没有尝试使用带有树控件的CDialog并检查调用堆栈。

创建控件后不会发送消息。它在创建控件的过程中发送。从文档中可以看出:“消息在[
CreateWindowEx
CreateWindow
]返回之前发送。”“新窗口的窗口过程在创建窗口之后,但在窗口变为可见之前接收此消息。”不幸的是,这并不完全正确:“如果应用程序返回–1,窗口将被销毁,
CreateWindowEx
CreateWindow
函数将返回空句柄。”不管该细节如何,根据您的特定需要,
WM\u CREATE
处理程序是设置
TVS\u复选框
样式的合适位置。有关详细说明,请参阅。