关于子类化
我从ComboBox派生了一个自己的ComboBox
该控件类在Dialog的InitDialog里可以正确使用
但是,在一个CPropertyPage的InitDialog里却总core。
位置在WINCORE.CPP中:
BOOL CWnd::SubclassWindow(HWND hWnd)
{
if (!Attach(hWnd))
return FALSE;
// allow any other subclassing to occur
PreSubclassWindow();
// now hook into the AFX WndProc
WNDPROC* lplpfn = GetSuperWndProcAddr();
WNDPROC oldWndProc = (WNDPROC)::SetWindowLong(hWnd, GWL_WNDPROC,
(DWORD)AfxGetAfxWndProc());
ASSERT(oldWndProc != (WNDPROC)AfxGetAfxWndProc()); <----这里
...
}
看了MSDN,好像SubclassDlgItem只对Dialog有效?
郁闷啊,达人出手哈~~~
问题点数:20、回复次数:5Top
1 楼XueBoy163(菜刀之恋)回复于 2005-02-22 20:36:41 得分 10
问题可能出在你的CPropertySheet创建时没有加入WS_EX_CONTROLPARENT属性Top
2 楼pp_ipr(ikn)回复于 2005-02-22 20:48:30 得分 0
给CPropertySheet添加WS_EX_CONTROLPARENT属性吗?
还是给CpropertyPage添加?
我试试Top
3 楼qrlvls( 空 气 )回复于 2005-02-22 20:49:42 得分 10
详细阅读 SetWindowLong / SetWindowLongPtrTop
4 楼pp_ipr(ikn)回复于 2005-02-22 20:55:27 得分 0
不好使 @_@
在我的CPropertyPage的OnInitDialog里:
LONG lWindowStyle = ::GetWindowLong(this->m_hWnd, GWL_STYLE);
lWindowStyle |= WS_EX_CONTROLPARENT;
::SetWindowLong(this->m_hWnd, GWL_STYLE, lWindowStyle);
// 下面是创建ComboBox
m_ctlHistoryCB.Detach();
m_ctlHistoryCB.SubclassDlgItem(IDC_CBHISTORY, this);
Top
5 楼pp_ipr(ikn)回复于 2005-02-23 08:10:45 得分 0
早上过来
Up一下
另外,上面代码写错了
是GWL_EXSTYLE而不是GWL_STYLE,不过改过来了也一样不行。。。Top




