1
我正在使用CControlBar派生類,並且想要檢測CControlBar的對接狀態何時發生更改(即,從垂直對齊到水平還是進入浮動模式)。檢測CControlBar的對接狀態何時發生變化
當然,我可以處理WM_SIZE,但每次WM_SIZE消息被觸發時,而不是僅在對接狀態發生變化時,似乎浪費了執行任務的資源。
任何人都可以請指出我在正確的方向嗎?
我正在使用CControlBar派生類,並且想要檢測CControlBar的對接狀態何時發生更改(即,從垂直對齊到水平還是進入浮動模式)。檢測CControlBar的對接狀態何時發生變化
當然,我可以處理WM_SIZE,但每次WM_SIZE消息被觸發時,而不是僅在對接狀態發生變化時,似乎浪費了執行任務的資源。
任何人都可以請指出我在正確的方向嗎?
您可以覆蓋CControlBar::OnBarStyleChange
虛擬功能以檢測控制欄樣式中的更改(CBRS_XXX
值 - 請參閱<afxres.h>
頭文件以瞭解詳細信息)。
要確定控制條是否浮動/停靠,請檢查CBRS_FLOATING
樣式。要檢查水平/垂直方向,請使用CBRS_ORIENT_HORZ
和CBRS_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
}
}
}
我希望這有助於!
這有助於很多!感謝您回答這麼快,併爲例 - 這太好了:-) – fhe 2009-02-07 18:42:00