MFC:创建控件后的通知
我是MFC的新手。我选择通过VS2017中的向导创建一个office风格的MFC应用程序。现在我想扩展CMFCShellTreeCtrl,所以我创建了另一个类,将其作为基类。基本的都很好。我的问题是,我想做如下事情:MFC:创建控件后的通知,mfc,controls,Mfc,Controls,我是MFC的新手。我选择通过VS2017中的向导创建一个office风格的MFC应用程序。现在我想扩展CMFCShellTreeCtrl,所以我创建了另一个类,将其作为基类。基本的都很好。我的问题是,我想做如下事情: whatever MyClass::FuncitonCalledAfterControlCreated(...) { SetFlags(GetFlags() | SHCONTF_NONFOLDERS); ModifyStyle(0x0, TVS_CHECKBOXES); }
whatever MyClass::FuncitonCalledAfterControlCreated(...)
{
SetFlags(GetFlags() | SHCONTF_NONFOLDERS);
ModifyStyle(0x0, TVS_CHECKBOXES);
}
但我很难确定要覆盖哪个虚拟函数,或者我应该做一个消息映射的事情吗?我猜不管是什么,所有的控制都是一样的?不管怎样,合适的功能是什么
蒂娅 如果控制源于
CWnd
aWM_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复选框
样式的合适位置。有关详细说明,请参阅。