我是MFC的新手。我选择通过VS2017中的向导创建一个办公风格的MFC应用程序。现在,我想扩展CMFCShellTreeCtrl,所以我创建了另一个类作为基类。基础很好。我的问题是我想做类似的事情:
whatever MyClass::FuncitonCalledAfterControlCreated(...)
{
SetFlags(GetFlags() | SHCONTF_NONFOLDERS);
ModifyStyle(0x0, TVS_CHECKBOXES);
}
但是我在弄清楚要覆盖哪个虚拟函数时遇到麻烦,还是应该执行其中的一种消息映射?我想这是什么,对所有控件来说都是相同的吗?无论如何,合适的功能是什么?
TIA !!
答案 0 :(得分:1)
如果控件是从CWnd
派生的,则发出WM_CREATE
,可以通过以下消息映射将其定向到控件:
ON_WM_CREATE()
和成员函数:
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
如果在对话框资源上,则不会发生WM_CREATE。有人说您可以使用PreSubClassWindow
,但是在测试Create()
的情况下,该调用是在CreateWindowEx
调用之前进行的,因此无法用于设置TVS_CHECKBOX样式。我没有尝试使用带有树控件的CDialog并检查调用堆栈。