2016-01-24 45 views
0

我有一個引人注目的問題:如何保存舊版MFC版本6中工具欄的位置?MFC:如何保存舊版MFC版本6中工具欄的位置?

我不能使用CWinApp::SaveBarState,因爲在此函數被調用(導致它斷言)的時刻,並不是所有的工具欄都存在。相反,我根據加載的文檔類型實例化工具欄。 不幸的是我還沒有找到我的方式CToolBarCtrl::SaveState這將是理想的使用,我猜。然而,與它玩耍的時候,我遇到兩個問題:

  • (一),以便恢復時,奇怪的是保存的工具欄,它沒有任何按鈕(和公正的最小尺寸,它從沒有按鈕意味着事實)。
  • (b)當我將兩個工具欄放在一起並關閉應用程序時,它們在恢復時顯示在彼此之下(這是我想要避免的)。我明白,這可能是錯誤地拯救國家的結果,正如(a)所述。

任何伸出援助之手,非常感謝!

問候,

托馬斯

回答

1

之前切換到色帶,我用這個funcion從this CodeProject article安排我的工具欄:

void CMainFrame::DockControlBarLeftOf(CToolBar* Bar, CToolBar* LeftOf) 
{ 
    CRect rect; 
    DWORD dw; 
    UINT n; 

    // get MFC to adjust the dimensions of all docked ToolBars 
    // so that GetWindowRect will be accurate 
    RecalcLayout(TRUE); 

    LeftOf->GetWindowRect(&rect); 
    rect.OffsetRect(1,0); 
    dw=LeftOf->GetBarStyle(); 
    n = 0; 
    n = (dw&CBRS_ALIGN_TOP) ? AFX_IDW_DOCKBAR_TOP : n; 
    n = (dw&CBRS_ALIGN_BOTTOM && n==0) ? AFX_IDW_DOCKBAR_BOTTOM : n; 
    n = (dw&CBRS_ALIGN_LEFT && n==0) ? AFX_IDW_DOCKBAR_LEFT : n; 
    n = (dw&CBRS_ALIGN_RIGHT && n==0) ? AFX_IDW_DOCKBAR_RIGHT : n; 

    // When we take the default parameters on rect, DockControlBar will dock 
    // each Toolbar on a seperate line. By calculating a rectangle, we 
    // are simulating a Toolbar being dragged to that location and docked. 
    DockControlBar(Bar,n,&rect); 
} 

我敢肯定,你可以很容易地用這個您的保存和加載代碼來恢復工具欄。

+0

嗨Thomiel,是的,我雖然把工具欄放在彼此相鄰將近理想,所以我從另一個論壇提取解決方案。它基本上不能解決我在會話(註冊表或INI文件)中保存佈局的問題,但就像我說的那樣,它足夠接近。我已經提高了你的答案;-) – tomascz