步驟:
1,添加String Table中的資源,IDS_TIMER
2,在MainFrm.cpp文件中的indicators數(shù)組中添加IDS_TIMER
3,在OnCreate函數(shù)中設(shè)置一個(gè)定時(shí)器。
4.添加消息為WM_TIMER的函數(shù)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();????????//獲得當(dāng)前時(shí)間
????CString?strTime?=?t.Format("%H:%M:%S");????//格式化當(dāng)前時(shí)間
????CClientDC?dc(this);
????CSize?sz?=?dc.GetTextExtent(strTime);????//獲得時(shí)間顯示的寬度
????indexStatusBar?=?m_wndStatusBar.CommandToIndex(IDS_TIMER);????//獲得窗格的索引
????m_wndStatusBar.SetPaneInfo(indexStatusBar,IDS_TIMER,SBPS_NORMAL,sz.cx);????//改變窗格的寬度
????m_wndStatusBar.SetPaneText(indexStatusBar,strTime);????????//設(shè)置窗格的內(nèi)容
????

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

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