WTL CMultiPaneStatusBarCtrl 等于 MFC CMyStatusBar
用过 WTL CMultiPaneStatusBarCtrl 的,感觉功能很不错,与 MFC CMyStatusBar 差不多。
与 MFC CMyStatusBar 不同的是,当鼠标点击菜单时,WTL CMultiPaneStatusBarCtrl 会出现讨厌的白板。
不过还是有办法解决的。
建立一个继承自 CMultiPaneStatusBarCtrlImpl 的子类 CMyMultiPaneStatusBarCtrl。
1,屏蔽 SB_SIMPLE,就不会出现讨厌的白板。
2,监听 SB_SETTEXT, 使用菜单项提示信息 重定向到 StatusBar 指定位置, 本文用 ID_DEFAULT_PANE。
class CMyMultiPaneStatusBarCtrl : public CMultiPaneStatusBarCtrlImpl<CMyMultiPaneStatusBarCtrl>
{
public:
DECLARE_WND_SUPERCLASS(_T("WTL_MY_MultiPaneStatusBar"), GetWndClassName())
BEGIN_MSG_MAP(CMyMultiPaneStatusBarCtrl)
MESSAGE_HANDLER(SB_SETTEXT, OnMySetText)
MESSAGE_HANDLER(SB_SIMPLE, OnSbSimple)
CHAIN_MSG_MAP(CMultiPaneStatusBarCtrlImpl<CMyMultiPaneStatusBarCtrl>)
END_MSG_MAP()
LRESULT OnSbSimple(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
if( wParam == 0 )
{
SetPaneText( ID_DEFAULT_PANE, ( LPCTSTR ) _T("Ready") );
}
bHandled = TRUE;
return 0;
}
LRESULT OnMySetText(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
if( wParam == 0x000001FF )
{
SetPaneText( ID_DEFAULT_PANE, ( LPCTSTR ) lParam );
bHandled = TRUE;
}
bHandled = FALSE;
return 0;
}
};
好了,如你所愿,工作正常。
http://blog.youkuaiyun.com/gocad/article/details/8865237