1. 程式人生 > >MFC 多文件分割檢視

MFC 多文件分割檢視

剛開始以為在CMainFrame類的裡面新建分割檢視時一直報錯,後來才發現需要在CChildFrame裡,在這個地方折騰了一個晚上也沒有搞明白,後來看到InitInstance裡面的程式碼才明白,檢視是跟CChildFrame關聯,不是跟CMainFrame關聯,此處做個記錄,以後忘了還有的找

CMultiDocTemplate* pDocTemplate;
pDocTemplate = new CMultiDocTemplate(IDR_SmartReadingTYPE,
               RUNTIME_CLASS(CSmartReadingDoc),
               RUNTIME_CLASS(CChildFrame), // 自定義 MDI 子框架
               RUNTIME_CLASS(CSmartReadingView));

BOOL CChildFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
	// TODO: 在此新增專用程式碼和/或呼叫基類
	 //建立一個靜態分欄視窗,分為1行2列
	if (m_wndSplitter.CreateStatic(this, 1, 2) == NULL)
	{
		return FALSE;
	}
	CRect rect;
	GetClientRect(&rect);
	//將CMedicTreeView連線到0行0列窗格上
	m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CSmartReadingView), CSize(rect.Width()- PROPERTIES_WIDTH, rect.Height()), pContext);
	//將CMedicListView連線到0行1列窗格上
	m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CBaiduPropertiesView), CSize(PROPERTIES_WIDTH, rect.Height()), pContext);

	return TRUE; //必須返回TRUE,不需要呼叫基類否則開啟的第二個文件佈局會顯示不完全
	//return CMDIChildWndEx::OnCreateClient(lpcs, pContext);
}


void CChildFrame::OnSize(UINT nType, int cx, int cy)
{
	CMDIChildWndEx::OnSize(nType, cx, cy);

	// TODO: 在此處新增訊息處理程式程式碼
	//這裡需要注意視窗大小必須大於0,否則設定分割檢視寬度會報錯
	if (IsWindowVisible() && cx>30 && cy>30)
	{
		CRect clientRect;
		GetClientRect(&clientRect);

		m_wndSplitter.SetColumnInfo(0, clientRect.Width() - PROPERTIES_WIDTH, 10);
		m_wndSplitter.SetColumnInfo(1, PROPERTIES_WIDTH, 10);
		m_wndSplitter.RecalcLayout();
	}
}