最近突然接到一個任務,需要做一個界面元素比較豐富的DockablePane。由於才接觸MFC對內部機制還不夠了解,想也沒想就用資源管理器畫了一個對話框資源。結果悲劇不幸的發生了。弄了半天也沒有找到什麼辦法把對話框支援生成的CFormView放到CDockablePane上,而CFormView的Create方法也爲私有方法,糾結了一上午沒有弄出一個結果來。後來靈機移動MFC中所有的窗口都是繼承至CWnd,嘗試把CFormView作爲一個CWnd的指針來創建果斷的解決了這個問題。
代碼如下:
int CMyPanel::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDockablePane::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
CWnd* pWnd = &m_wndMyView;
if( !pWnd->Create( NULL, NULL, AFX_WS_DEFAULT_VIEW,
CRect(0, 0, 260, 420), this, ID_LAYOUT_VIEW, NULL))
{
TRACE0("Failed to create QueryView \n");
return -1; // fail to create
}
return 0;
}
void CMyPanel::OnSize(UINT nType, int cx, int cy) { CDockablePane::OnSize(nType, cx, cy);
// TODO: Add your message handler code here if( m_wndMyView.m_hWnd) { m_wndMyView.MoveWindow( 0, 0, cx, cy); } }