2009-02-07 72 views
1

我正在使用CControlBar派生類,並且想要檢測CControlBar的對接狀態何時發生更改(即,從垂直對齊到水平還是進入浮動模式)。檢測CControlBar的對接狀態何時發生變化

當然,我可以處理WM_SIZE,但每次WM_SIZE消息被觸發時,而不是僅在對接狀態發生變化時,似乎浪費了執行任務的資源。

任何人都可以請指出我在正確的方向嗎?

回答

3

您可以覆蓋CControlBar::OnBarStyleChange虛擬功能以檢測控制欄樣式中的更改(CBRS_XXX值 - 請參閱<afxres.h>頭文件以瞭解詳細信息)。

要確定控制條是否浮動/停靠,請檢查CBRS_FLOATING樣式。要檢查水平/垂直方向,請使用CBRS_ORIENT_HORZCBRS_ORIENT_VERT樣式。

因此,使用CToolBar(從CControlBar派生)爲例:

class CMyToolBar : public CToolBar { 
public: 
    virtual void OnBarStyleChange(DWORD dwOldStyle, DWORD dwNewStyle); 
}; 

void CMyToolBar::OnBarStyleChange(DWORD dwOldStyle, DWORD dwNewStyle) 
{ 
    // Call base class implementation. 
    CToolBar::OnBarStyleChange(dwOldStyle, dwNewStyle); 

    // Use exclusive-or to detect changes in style bits. 
    DWORD changed = dwOldStyle^dwNewStyle; 

    if (changed & CBRS_FLOATING) { 
     if (dwNewStyle & CBRS_FLOATING) { 
      // ToolBar now floating 
     } 
     else { 
      // ToolBar now docked 
     } 
    } 

    if (changed & CBRS_ORIENT_ANY) { 
     if (dwNewStyle & CBRS_ORIENT_HORZ) { 
      // ToolBar now horizontal 
     } 
     else if (dwNewStyle & CBRS_ORIENT_VERT) { 
      // ToolBar now vertical    
     } 
    } 
} 

我希望這有助於!

+0

這有助於很多!感謝您回答這麼快,併爲例 - 這太好了:-) – fhe 2009-02-07 18:42:00

相關問題