小弟我重载了CListCtrl,在什么时候子类化CHeaderCtrl呢
我重载了CListCtrl,在什么时候子类化CHeaderCtrl呢?
可能首先想到是在PreSubclassWindow函数里面,我也是这样想的,
程序如下:
CListCtrl::PreSubclassWindow();
CHeaderCtrl* pHeaderCtrl = CListCtrl::GetHeaderCtrl();
if (pHeaderCtrl && pHeaderCtrl-> GetSafeHwnd())
m_HeaderCtrl.SubclassWindow(pHeaderCtrl-> GetSafeHwnd());
上面的m_HeaderCtrl就是用来子类化CListCtrl中的CHeaderCtrl的。
m_HeaderCtrl是我从CHeaderCtrl派生的一个类,用于管理列表头。
现在出现一个问题,如果列表是以隐藏的方式创建的话,上面的程序得到的
pHeaderCtrl 将为空,即此时根本还未创建列表头窗口。这样直接造成了
子类化的不完全(列表头没有子类化),请问有什么方法可以解决这个问题?
目前我在CListCtrl的OnShowWindow函数里面写上下面的程序:
if (bShow && !m_HeaderCtrl.GetSafeHwnd())
{
CHeaderCtrl* pHeaderCtrl = CListCtrl::GetHeaderCtrl();
if (pHeaderCtrl && pHeaderCtrl-> GetSafeHwnd())
m_HeaderCtrl.SubclassWindow(pHeaderCtrl-> GetSafeHwnd());
}
问题基本解决了,可是总觉得傻傻的!不知道有没有更好的办法?
------解决方案--------------------
试下在OnCtlColor中做
------解决方案--------------------
不用GetHeaderCtrl,用::GetDlgItem(m_hWnd, 0); 试试
------解决方案--------------------
找到和你一样遭遇的人了, 他通过一个自定义消息解决了
http://www.codecomments.com/archive372-2005-2-409420.html
可能首先想到是在PreSubclassWindow函数里面,我也是这样想的,
程序如下:
CListCtrl::PreSubclassWindow();
CHeaderCtrl* pHeaderCtrl = CListCtrl::GetHeaderCtrl();
if (pHeaderCtrl && pHeaderCtrl-> GetSafeHwnd())
m_HeaderCtrl.SubclassWindow(pHeaderCtrl-> GetSafeHwnd());
上面的m_HeaderCtrl就是用来子类化CListCtrl中的CHeaderCtrl的。
m_HeaderCtrl是我从CHeaderCtrl派生的一个类,用于管理列表头。
现在出现一个问题,如果列表是以隐藏的方式创建的话,上面的程序得到的
pHeaderCtrl 将为空,即此时根本还未创建列表头窗口。这样直接造成了
子类化的不完全(列表头没有子类化),请问有什么方法可以解决这个问题?
目前我在CListCtrl的OnShowWindow函数里面写上下面的程序:
if (bShow && !m_HeaderCtrl.GetSafeHwnd())
{
CHeaderCtrl* pHeaderCtrl = CListCtrl::GetHeaderCtrl();
if (pHeaderCtrl && pHeaderCtrl-> GetSafeHwnd())
m_HeaderCtrl.SubclassWindow(pHeaderCtrl-> GetSafeHwnd());
}
问题基本解决了,可是总觉得傻傻的!不知道有没有更好的办法?
------解决方案--------------------
试下在OnCtlColor中做
------解决方案--------------------
不用GetHeaderCtrl,用::GetDlgItem(m_hWnd, 0); 试试
------解决方案--------------------
找到和你一样遭遇的人了, 他通过一个自定义消息解决了
http://www.codecomments.com/archive372-2005-2-409420.html