读书人

郁闷重载PreCreateWindow如何没走

发布时间: 2013-01-20 10:22:40 作者: rapoo

郁闷,重载PreCreateWindow怎么没走?
自绘listbox,从它派生出CMyListBox,然后重载PreCreateWindow这个函数,想让它拥有LBS_OWNERDRAWFIXED样式,加断点发现这个函数没进来,不知道为什么?
[解决办法]
你的是动态创建的吗?
最好是放到PreSubclassWindow中,动态Create创建或者通过对话框模板方式添加都可以走到
[解决办法]
原因:你是SubClassWindow而不是Create
[解决办法]
"拖的控件" 先由对话框产生(时产生),以后才 attach 到 CWnd
[解决办法]
PreSubclassWindow
PreSubclassWindow是一个很好的定制控件的位置。如果我们通过重载CWnd::PreCreateWindow定制控件,而用户在对话框中使用控件。由于对话框中的控件窗口是通过CreateDlgIndirect创建,不经过CWnd::CreateEx函数,PreCreateWindow函数不会被调用。

其实,用户要在对话框中使用定制控件,必须用DDX或者SubclassDlgItem函数子类化控件,这时PreSubclassWindow一定会被调用。

如果用户直接创建定制控件窗口,CWnd::CreateEx函数就一定会被调用,控件窗口一定会被子类化以安装MFC消息泵。所以在MFC中,PreSubclassWindow是创建窗口的必经之路。

读书人网 >VC/MFC

热点推荐