想做双层列头,于是派生了一个CHeaderCtrl,派生一个CListCtrl,处理派生list的PreSubclassWindow函数void CMultiHeadList::PreSubclassWindow()
{
CHeaderCtrl *pHeader = GetHeaderCtrl();
m_Header.SubclassWindow(pHeader->GetSafeHwnd());
}
如果list是有资源的,可以这样重绘列头,但是如果list是用Create动态创建的,在PreSubclassWindow里,GetHeaderCtrl()返回的始终是空指针,这种情况下如何把我派生的header绑定到list上?

解决方案 »

  1.   

    看看PreSubclassWindow有没有被调用?
    在OnCreate里getheader看看
      

  2.   

    要这样的 如下
    _AFX_THREAD_STATE* pThreadState = AfxGetThreadState();
    if (pThreadState->m_pWndInit == NULL)
    {
    m_wndHeader.SubclassDlgItem(0, this);
    }
      

  3.   

    PreSubclassWindow被调用了。
    暂时不想加OnCreate,因为这个多表头类要多处用到,有的有资源,有的没有资源。
      

  4.   

    void CMultiHeadList::PreSubclassWindow()
    {
    _AFX_THREAD_STATE* pThreadState = AfxGetThreadState();
    if (pThreadState->m_pWndInit == NULL)
    {
    m_Header.SubclassDlgItem(0, this);
    }
    }
      

  5.   

    你给我看看你的CList和CHeaderCtrl的 宏声明. 是不是DECLARE_DYNAMIC(..)
      

  6.   

    都是又响应了wm_create消息,可以了。
      

  7.   

    呵呵 结贴给分吧.必须都是DECLARE_DYNAMIC 和IMPLEMENT_DYNAMIC
      

  8.   

    那就把OnCreate也加上吧,反正两个里面总会有一个响应到的