下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、VC技巧六 - 工具條和狀態(tài)條在狀態(tài)條上顯示當(dāng)前時(shí)間 執(zhí)行下面五個(gè)步驟:編輯資源。添加一個(gè)ID為ID_INDICATOR_TIME的新字符串,并將其內(nèi)容設(shè)置為00:00(或者00:00:00)。狀態(tài)條使用設(shè)置的初始值來計(jì)算Pane的大小。在應(yīng)用程序中可以通過調(diào)用CStatusBar:SetPaneInfo()函數(shù)來動(dòng)態(tài)的改變Pane的大小。保存資源。編輯Mainfrm.cpp。狀態(tài)條對象使用indicators數(shù)組中的數(shù)據(jù)并且按照其在數(shù)組中的順序生成狀態(tài)條,在indicators數(shù)組的適當(dāng)位置插入ID_INDICATOR_TIME。在CMainFrame類中加入下列的消息映射Mainfrm.h
2、 /AFX_MSG(CMainFrame) afx_msg void OnUpdateTime(CCmdUI *pCmdUI); /AFX_MSGMainfrm.cpp BEGIN_MESSAGE_MAP(CMainFrame,CMDIFrameWnd) /AFX_MSG_MAP(CMainFrame) ON_UPDATE_COMMAND_UI(ID_INDICATOR_TIME,OnUpdateTime) /AFX_MSG_MAP END_MESSAGE_MAP()由于ID_INDICATOR_TIME是一個(gè)ID而不是一個(gè)類,所以上述消息映射只能手動(dòng)加入而不能使用ClassWizard。注意
3、:如果你的程序還需要增加OnTimer函數(shù)(使用ClassWizard),那么你應(yīng)當(dāng)先使用ClassWizard加入ON_WM_TIMER消息映射,然后再手動(dòng)加入上述消息映射,如果次序相反,上述消息映射將會(huì)被ClassWizard刪除掉。編輯Mainfrm.cpp,加入下列函數(shù):void CMainFrame:OnUpdateTime(CCmdUI *pCmdUI)/狀態(tài)條時(shí)間顯示函數(shù) CTime t = CTime:GetCurrentTime(); char szTime6; int nHour = t.GetHour(); int nMinute = t.GetMinute(); if
4、(nHour > 12) nHour = nHour - 12;/如要按24小時(shí)制顯示,請將此行注釋掉 wsprintf(szTime, "%i:%02i", nHour, nMinute);/分秒一般習(xí)慣用兩位表示 /把時(shí)間寫到Pane m_wndStatusBar.SetPaneText(m_wndStatusBar.CommandToIndex (ID_INDICATOR_TIME), LPCSTR(szTime); pCmdUI->Enable();應(yīng)用程序在有空閑時(shí)間(idle time)時(shí)調(diào)用這個(gè)函數(shù)。每當(dāng)應(yīng)用程序清空其消息隊(duì)列時(shí),它將發(fā)送一個(gè)WM_
5、IDLEUPDATECMDUI消息(新的idle time)。關(guān)于idle time的更多幫助信息,請參看CWinApp:OnIdle()函數(shù)的幫助。到目前為止,程序還存在一個(gè)問題:當(dāng)用戶不操作該應(yīng)用程序時(shí),應(yīng)用程序接受不到消息,也就談不上清空消息隊(duì)列,所以就不會(huì)有idle time,因此顯示的時(shí)間就不會(huì)得到刷新。我們將在第五步中解決這個(gè)問題。在CMainFrame類OnCreate()中添加下列語句:m_nIDTimer = :SetTimer(NULL, 0, 1000, NULL);/發(fā)送消息,以便更新狀態(tài)條時(shí)間上述語句每秒鐘發(fā)送一個(gè)消息到應(yīng)用程序的消息隊(duì)列,當(dāng)應(yīng)用程序清空其消息隊(duì)列時(shí),
6、時(shí)間顯示將被更新。在CMainFrame類析構(gòu)函數(shù)中調(diào)用:KillTimer(NULL, m_nIDTimer)更多信息當(dāng)模式對話框彈出時(shí)(例如Help的About對話框),應(yīng)用程序的消息隊(duì)列由對話框處理。由于對話框的消息管理不包括idle time處理,所以O(shè)nUpdateTime函數(shù)不會(huì)被調(diào)用。如果你要在應(yīng)用中使用模式對話框,那么你的項(xiàng)目還要進(jìn)行下面的改進(jìn)(加入TimerProc函數(shù)以處理WM_TIMER消息):Mainfrm.h static void CALLBACK TimerProc(HWND hwnd, UINT uMsg, UINT uIDEvent, DWORD dwTime
7、);Mainfrm.cpp void CALLBACK CMainFrame:TimerProc(HWND hwnd, UINT uMsg, UINT uIDEvent, DWORD dwTime) CMainFrame *pMainWnd = (CMainFrame *)AfxGetApp()->m_pMainWnd; ASSERT(uIDEvent = pMainWnd->m_nIDTimer); CCmdUI cui; cui.m_nID = ID_INDICATOR_TIME; cui.m_nIndex = 4; cui.m_pMenu = NULL; cui.m_pOth
8、er = &pMainWnd->m_wndStatusBar; pMainWnd->OnUpdateTime(&cui);/調(diào)用OnUpdateTime()函數(shù),更新時(shí)間顯示 修改CMainFrame類OnCreate()函數(shù)中SetTimer的調(diào)用格式:m_nIDTimer = :SetTimer(NULL, 0, 1000, TimerProc);實(shí)現(xiàn)平面工具欄的最簡單方法張圣華 在前面兩篇文章中,你已經(jīng)學(xué)到了如何實(shí)現(xiàn)類似 Word97 的工具欄。如果你不在乎工具欄上的 gripper (參見“如何實(shí)現(xiàn)類似 Word97 的工具欄”),則我可以教你一種最簡單的方
9、法來實(shí)現(xiàn)。 在建立了工具欄之后,加上下面一句: m_wndToolBar.ModifyStyle(0, TBSTYLE_FLAT);則你就可以實(shí)現(xiàn)不帶有g(shù)ripper的平面工具欄了。太簡單了吧。如何使能和禁止工具條的工具提示 如果設(shè)置了CBRS_TOOLTIPS風(fēng)格位,工具條將顯示工具提示,要使能或者禁止工具提示,需要設(shè)置或者清除該風(fēng)格位。下例通過調(diào)用CControlBar : : GetBarStyle和CControlBar : : SetBarStyle建立一個(gè)完成此功能的成員函數(shù):void CMainFrame : : EnableToolTips ( BOOL bDisplayTip
10、s )ASSERT_VALID (m_wndToolBar);DWORD dwStyle = m _wndToolBar.GetBarStyle ( ) ;if (bDisplayTips)dwStyle =CBRS_TOOLTIPS ;elsedwStyle & = CBRS_TOOLTIPS ;m_wndToolBar.SetBarStyle (dwStyle );如何設(shè)置工具條標(biāo)題 工具條是一個(gè)窗口,所以可以在調(diào)用CWnd : : SetWindowText來設(shè)置標(biāo)題,例子如下:int CMainFrame : : OnCreate (LPCREATESTRUCT lpCreat
11、eStruct )/ Set the caption of the toolbar .m_wndToolBar.SetWindowText (_T "Standdard");如何在代碼中獲取工具條和狀態(tài)條的指針 缺省時(shí), 工作框創(chuàng)建狀態(tài)條和工具條時(shí)將它們作為主框窗口的子窗口,狀態(tài)條有一個(gè)AFX_IDW_STATUS_BAR標(biāo)識(shí)符,工具條有一個(gè)AFX_IDW_TOOLBAR標(biāo)識(shí)符,下例說明了如何通過一起調(diào)用CWnd: : GetDescendantWindow和AfxGetMainWnd來獲取這些子窗口的指針:/Get pointer to status bar .CStatusBar * pStatusBar =(CStatusBar *) AfxGetMain
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025北京市個(gè)體工商戶雇工勞動(dòng)合同書范文
- 2025年度按摩店合伙人市場分析與競爭策略協(xié)議3篇
- 2025年度農(nóng)村墓地建設(shè)項(xiàng)目投資合作協(xié)議書
- 二零二五年度養(yǎng)老公寓入住與休閑娛樂服務(wù)合同3篇
- 二零二五年度公司企業(yè)間新能源車輛購置借款合同3篇
- 2025年度工傷賠償爭議解決機(jī)制協(xié)議書3篇
- 二零二五年度養(yǎng)老機(jī)構(gòu)兼職校醫(yī)照護(hù)服務(wù)合同3篇
- 二零二五年度養(yǎng)殖場專業(yè)技術(shù)人員聘用合同3篇
- 二零二五年度地下停車場開發(fā)與運(yùn)營管理合同3篇
- 二零二五年度智能電網(wǎng)設(shè)備采購合同風(fēng)險(xiǎn)識(shí)別與防范3篇
- TSG 51-2023 起重機(jī)械安全技術(shù)規(guī)程 含2024年第1號(hào)修改單
- 《正態(tài)分布理論及其應(yīng)用研究》4200字(論文)
- GB/T 45086.1-2024車載定位系統(tǒng)技術(shù)要求及試驗(yàn)方法第1部分:衛(wèi)星定位
- 浙江省杭州市錢塘區(qū)2023-2024學(xué)年四年級(jí)上學(xué)期英語期末試卷
- 1古詩文理解性默寫(教師卷)
- 廣東省廣州市越秀區(qū)2021-2022學(xué)年九年級(jí)上學(xué)期期末道德與法治試題(含答案)
- 2024-2025學(xué)年六上科學(xué)期末綜合檢測卷(含答案)
- 在線教育平臺(tái)合作合同助力教育公平
- 工地鋼板短期出租合同模板
- 女排精神課件教學(xué)課件
- 2024年湖南省公務(wù)員考試《行測》真題及答案解析
評(píng)論
0/150
提交評(píng)論