2015-04-02 15 views
2

我試圖創建一個包含使用的CMDIChildWnd,2級CSplitterWnd的和3的CFormView的3次的分級窗口:如何專注於某一觀點在MFC CSplitter

  1. 包含靜態控制表單視圖
  2. 甲形式來顯示,我使用查看PDF文件
  3. 針對與主視圖

主分離器的一些動作的側板(含有的MainView和泰斯主窗口kPane)初始化爲1行2列。 第二個拆分器包含2行1列,包含Tabs和主分離器。

此圖片介紹應該如何構建的: Visual description

我的問題是,的MainView沒有焦點,因此,工具欄按鈕不進行縮放,保存爲啓用,等等

當我不使用橫幅分離器時,它工作正常。 我試圖setActivePane()的setFocus()setActiveWindow()就 這裏是我在CChildFrame創建它::的OnCreateClient()

if (m_BannerSplitter->CreateStatic(this, 2, 1)) 
{ 
    m_BannerSplitter->CreateView(0, 
           0, 
           RUNTIME_CLASS(CBannerView), 
           CSize(r.Width(),28), 
           pContext); 
    m_splitter->CreateStatic(m_BannerSplitter, 
           1, 
           2, 
           WS_CHILD | WS_VISIBLE | WM_SHOWWINDOW, 
           m_BannerSplitter->IdFromRowCol(1,0)); 

} 
else 
{ 
    m_splitter->CreateStatic(this, 1, 2); 
} 

m_splitter->CreateView(0, 
         0, 
         RUNTIME_CLASS(CMainView), 
         CSize(r.Width()-m_splitter->m_iRightTabFullWidth-14,1), 
         pContext); 
m_splitter->CreateView(0, 
         1, 
         RUNTIME_CLASS(CTasksView), 
         CSize(m_splitter->m_iRightTabFullWidth, 1), 
         pContext); 

m_splitter->SetColumnInfo(1, 
          m_splitter->m_iRightTabFullWidth, 
          m_splitter->m_iRightTabFullWidth); 

回答

0

我已經找到了解決方案,這是非常簡單的。 該對象包含分路器是具有SetActiveView(CView的*視圖)功能的的CMDIChildWnd。

所以我試着用得到的觀點:

CView *mainView = (CView *)m_splitter->GetDlgItem(m_splitter->IdFromRowCol(0, 0)); 

,比從CChildFrame使用::的OnCreateClient()事件

SetActiveView(mainView); 
0

的問題是,總是路由命令檢查活動視圖隨後文件。

如果所有命令應當由相應的視圖處理,不管是什麼看法剛剛實現自己的命令傳送的焦點。

所以覆蓋的CMainFrame ::的OnCmdMsg。

BOOL CMainFrame::OnCmdMsg(UINT nID,int nCode,void* pExtra,AFX_CMDHANDLERINFO* pHandlerInfo) 
{ 
    // Do the standard routing (View, Frame, Application) 
    if (__super::OnCmdMsg(nID,nCode,pExtra,pHandlerInfo)) 
    return TRUE; 

    // If not handled ask all other views to handle the command 
    return m_pBannerView->OnCmdMsg(nID,nCode,pExtra,pHandlerInfo) || 
     m_pMainView->OnCmdMsg(nID,nCode,pExtra,pHandlerInfo) || 
     m_pTaskView->OnCmdMsg(nID,nCode,pExtra,pHandlerInfo); 
}   

我的代碼只是在每個可用視圖沒有被正常路由處理之後提供每個命令。