我正在使用 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
}
}
}
我希望这有帮助!