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.csdn.net/gocad/article/details/8865237