創建了靜態視圖
代碼如下
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
// TODO: 在此添加專用代碼和/或呼叫基類
//創建一個靜態視窗,分為一行兩列
if (!m_splitter.CreateStatic(this, 1, 2) )
return FALSE;
if (m_splitter1.CreateStatic(&m_splitter, 2, 1, WS_CHILD | WS_VISIBLE, m_splitter.IdFromRowCol(0, 0)) == NULL)
return FALSE;
//將FormView1類鏈接到第二個分欄物件的0行0列
if (m_splitter1.CreateView(0, 0, RUNTIME_CLASS(FormView1), CSize(400, 400), pContext)==NULL)
return FALSE;
//將FormView2類鏈接到第二個分欄物件的1行0列
m_splitter1.CreateView(1, 0, RUNTIME_CLASS(FormView2), CSize(400, 200), pContext);
//將COTDRView鏈接到0行1列窗格上
m_splitter.CreateView(0, 1, RUNTIME_CLASS(RightView), CSize(100, 600), pContext);
return TRUE;
}
但是,視圖總是右邊占據全部大小如下圖:

所以多載onsize來設定視圖大小,可是就會一直報錯
,同伴一樣的代碼就沒有問題,所以還想請給位大神指點指點!
uj5u.com熱心網友回復:
debug下,單步跟蹤一下,出錯代碼行定位uj5u.com熱心網友回復:
debug下,單步跟蹤一下,出錯代碼行定位uj5u.com熱心網友回復:
OnSize中需要先判斷一下HWND是否有效:if(NULL != m_splitwnd.GetSafeHwnd())
{
CRect rect;
GetClientRect(...);
m_splitwnd.SetRowInfo();
m_splitwnd.SetColumnInfo();
m_splitwnd.RecalcLayout();
}
uj5u.com熱心網友回復:
崩潰的時候在彈出的對話框按相應按鈕進入除錯,按Alt+7鍵查看Call Stack即“呼叫堆疊”里面從上到下列出的對應從里層到外層的函式呼叫歷史。雙擊某一行可將游標定位到此次呼叫的源代碼或匯編指令處,看不懂時雙擊下一行,直到能看懂為止。uj5u.com熱心網友回復:
if(IsWindow(m_Splitter.m_hWnd))uj5u.com熱心網友回復:
3樓和5樓 思想正確 因為OnSize會在OnCreateClient 前執行 所以,在第一次進入OnSize時 splitter是空的 還沒有創建, 需要進行判斷,但是3樓和5樓方法我試了沒有效果一樣進入執行,所以我在splitter.CreateStatic 后添加標記 m_bIsSplitterCreate = TRUE ,在onsize中先判斷 if (m_bIsSplitterCreate == TRUE)uj5u.com熱心網友回復:
2016年的貼子被誰頂起來了
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/57509.html
標籤:界面
