我正在使用一个CControlBar派生类,我想检测CControlBar的对接状态何时发生了变化(即从垂直向水平对接或何时进入浮动模式)。
当然,我可以处理WM_SIZE,但是每次触发WM_SIZE消息而不是仅在对接状态发生变化时,它似乎浪费了执行任务的资源。
任何人都可以指出我正确的方向吗?
答案 0 :(得分:3)
您可以覆盖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
}
}
}
我希望这有帮助!