步驟:
1,添加String Table中的資源,IDS_TIMER
2,在MainFrm.cpp文件中的indicators數組中添加IDS_TIMER
3,在OnCreate函數中設置一個定時器。
4.添加消息為WM_TIMER的函數OnTimer。
代碼:
int?CMainFrame::OnCreate(LPCREATESTRUCT?lpCreateStruct)


{
????if?(CFrameWnd::OnCreate(lpCreateStruct)?==?-1)
????????return?-1;
????
????if?(!m_wndToolBar.CreateEx(this,?TBSTYLE_FLAT,?WS_CHILD?|?WS_VISIBLE?|?CBRS_TOP
????????|?CBRS_GRIPPER?|?CBRS_TOOLTIPS?|?CBRS_FLYBY?|?CBRS_SIZE_DYNAMIC)?||
????????!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))

????
{
????????TRACE0("Failed?to?create?toolbar\n");
????????return?-1;??????//?fail?to?create
????}

????if?(!m_wndStatusBar.Create(this)?||
????????!m_wndStatusBar.SetIndicators(indicators,
??????????sizeof(indicators)/sizeof(UINT)))

????
{
????????TRACE0("Failed?to?create?status?bar\n");
????????return?-1;??????//?fail?to?create
????}

????//?TODO:?Delete?these?three?lines?if?you?don't?want?the?toolbar?to
????//??be?dockable
????m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
????EnableDocking(CBRS_ALIGN_ANY);
????DockControlBar(&m_wndToolBar);
????
????int?indexStatusBar?=?0;
????CTime?t?=?CTime::GetCurrentTime();
????CString?strTime?=?t.Format("%H:%M:%S");
????CClientDC?dc(this);
????CSize?sz?=?dc.GetTextExtent(strTime);
????indexStatusBar?=?m_wndStatusBar.CommandToIndex(IDS_TIMER);
????m_wndStatusBar.SetPaneInfo(indexStatusBar,IDS_TIMER,SBPS_NORMAL,sz.cx);
????m_wndStatusBar.SetPaneText(indexStatusBar,strTime);

????SetTimer(1,1000,NULL);

????return?0;
}




void?CMainFrame::OnTimer(UINT?nIDEvent)?


{
????//?TODO:?Add?your?message?handler?code?here?and/or?call?default
????int?indexStatusBar?=?0;
????CTime?t?=?CTime::GetCurrentTime();????????//獲得當前時間
????CString?strTime?=?t.Format("%H:%M:%S");????//格式化當前時間
????CClientDC?dc(this);
????CSize?sz?=?dc.GetTextExtent(strTime);????//獲得時間顯示的寬度
????indexStatusBar?=?m_wndStatusBar.CommandToIndex(IDS_TIMER);????//獲得窗格的索引
????m_wndStatusBar.SetPaneInfo(indexStatusBar,IDS_TIMER,SBPS_NORMAL,sz.cx);????//改變窗格的寬度
????m_wndStatusBar.SetPaneText(indexStatusBar,strTime);????????//設置窗格的內容
????

????CFrameWnd::OnTimer(nIDEvent);
}

注意在CMainFrame函數中的那個OnCreate函數中的部分代碼,設置顯示時間的,其實是一個初始化的功能,因為開始的時候如果沒有這個代碼是不顯示時間的。當然,如果僅僅是一個計時器,那么后面根據這個代碼,也是會自動更新時間的,只是初始化的話未知時間。
吸取的一點就是:懂得了如何改變狀態欄的寬度,這樣就不會出現前面的那個不知道狀態欄太窄怎么辦的問題。
解決方法是:
得到顯示的CSize,然后使用CommandToIndex來得到是需要改變那個的寬度(即得到顯示內容的窗格的索引,正確的改變那一個,而不是所有的寬度),設置SetPaneInfo來改變寬度。最終設置內容就OK了。
詳細點就是:真正改變寬度的是SetPaneInfo的最后一個參數,而這個正式CSize的的寬度cx。
posted on 2010-02-17 22:17
deercoder 閱讀(512)
評論(0) 編輯 收藏 引用