我在网上找了一个spllitter的例子,准备用在自己的工程里面,别人是在对话框中添加了一个CStatic的资源,然后写了一个函数,将自己派生于CWnd的CSplitterWnd与该Static资源绑定,其代码如下:
例子的代码请看:
http://podaoke.myetang.com/source/splitter/dlg/cxysplitter.shtml.htm
//ctrlId为Static控件的ID号
BOOL CxSplitterWnd::BindWithControl(CWnd *parent, DWORD ctrlId)
{
    m_Parent = parent;
    m_minLeft = m_minRight = 10;
        
    SubclassWindow(m_Parent->GetDlgItem(ctrlId)->GetSafeHwnd());
   
    //Make sure to get mouse message from the dialog window
    DWORD style = GetStyle();
    ::SetWindowLong(GetSafeHwnd(), GWL_STYLE, style | SS_NOTIFY);
    
    return TRUE;
}我唯一改动的地方是CStatic控件我是动态创建的(工程需要),我创建的过程如下:
m_wndXStatic.Create(NULL,WS_CHILD | WS_VISIBLE | SS_CENTER, CRect(0,0,50,100), this,0x1216 );然后调用
m_xSplitter1.BindWithControl(this, 0x1216);//
//原文是m_xsplitter1.bindwithcontrol(this, idc_xbar1); //其中idc_xbar1为添加的Static控件的ID号。但是这样改动之后,每次执行到SubclassWindowde的时候就出现问题,跟踪后发现在
BOOL CWnd::SubclassWindow(HWND hWnd)
{
if (!Attach(hWnd))
return FALSE;
...
}
提示错误在:
BOOL CWnd::Attach(HWND hWndNew)
{
     ASSERT(m_hWnd == NULL);     // only attach once, detach on destroy
     ASSERT(FromHandlePermanent(hWndNew) == NULL);//此地出现错误
     // must not already be in permanent map
...
}
不知道这是什么原因,不清楚动态创建和静态添加资源之间有什么区别?
请大侠帮帮小弟!多谢!