在状态条上显示当前时间_第1页
在状态条上显示当前时间_第2页
在状态条上显示当前时间_第3页
在状态条上显示当前时间_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、VC技巧六 - 工具条和状态条在状态条上显示当前时间 执行下面五个步骤:编辑资源。添加一个ID为ID_INDICATOR_TIME的新字符串,并将其内容设置为00:00(或者00:00:00)。状态条使用设置的初始值来计算Pane的大小。在应用程序中可以通过调用CStatusBar:SetPaneInfo()函数来动态的改变Pane的大小。保存资源。编辑Mainfrm.cpp。状态条对象使用indicators数组中的数据并且按照其在数组中的顺序生成状态条,在indicators数组的适当位置插入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是一个ID而不是一个类,所以上述消息映射只能手动加入而不能使用ClassWizard。注意

3、:如果你的程序还需要增加OnTimer函数(使用ClassWizard),那么你应当先使用ClassWizard加入ON_WM_TIMER消息映射,然后再手动加入上述消息映射,如果次序相反,上述消息映射将会被ClassWizard删除掉。编辑Mainfrm.cpp,加入下列函数:void CMainFrame:OnUpdateTime(CCmdUI *pCmdUI)/状态条时间显示函数 CTime t = CTime:GetCurrentTime(); char szTime6; int nHour = t.GetHour(); int nMinute = t.GetMinute(); if

4、(nHour > 12) nHour = nHour - 12;/如要按24小时制显示,请将此行注释掉 wsprintf(szTime, "%i:%02i", nHour, nMinute);/分秒一般习惯用两位表示 /把时间写到Pane m_wndStatusBar.SetPaneText(m_wndStatusBar.CommandToIndex (ID_INDICATOR_TIME), LPCSTR(szTime); pCmdUI->Enable();应用程序在有空闲时间(idle time)时调用这个函数。每当应用程序清空其消息队列时,它将发送一个WM_

5、IDLEUPDATECMDUI消息(新的idle time)。关于idle time的更多帮助信息,请参看CWinApp:OnIdle()函数的帮助。到目前为止,程序还存在一个问题:当用户不操作该应用程序时,应用程序接受不到消息,也就谈不上清空消息队列,所以就不会有idle time,因此显示的时间就不会得到刷新。我们将在第五步中解决这个问题。在CMainFrame类OnCreate()中添加下列语句:m_nIDTimer = :SetTimer(NULL, 0, 1000, NULL);/发送消息,以便更新状态条时间上述语句每秒钟发送一个消息到应用程序的消息队列,当应用程序清空其消息队列时,

6、时间显示将被更新。在CMainFrame类析构函数中调用:KillTimer(NULL, m_nIDTimer)更多信息当模式对话框弹出时(例如Help的About对话框),应用程序的消息队列由对话框处理。由于对话框的消息管理不包括idle time处理,所以OnUpdateTime函数不会被调用。如果你要在应用中使用模式对话框,那么你的项目还要进行下面的改进(加入TimerProc函数以处理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);/调用OnUpdateTime()函数,更新时间显示 修改CMainFrame类OnCreate()函数中SetTimer的调用格式:m_nIDTimer = :SetTimer(NULL, 0, 1000, TimerProc);实现平面工具栏的最简单方法张圣华 在前面两篇文章中,你已经学到了如何实现类似 Word97 的工具栏。如果你不在乎工具栏上的 gripper (参见“如何实现类似 Word97 的工具栏”),则我可以教你一种最简单的方

9、法来实现。 在建立了工具栏之后,加上下面一句: m_wndToolBar.ModifyStyle(0, TBSTYLE_FLAT);则你就可以实现不带有gripper的平面工具栏了。太简单了吧。如何使能和禁止工具条的工具提示 如果设置了CBRS_TOOLTIPS风格位,工具条将显示工具提示,要使能或者禁止工具提示,需要设置或者清除该风格位。下例通过调用CControlBar : : GetBarStyle和CControlBar : : SetBarStyle建立一个完成此功能的成员函数: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 );如何设置工具条标题 工具条是一个窗口,所以可以在调用CWnd : : SetWindowText来设置标题,例子如下:int CMainFrame : : OnCreate (LPCREATESTRUCT lpCreat

11、eStruct )/ Set the caption of the toolbar .m_wndToolBar.SetWindowText (_T "Standdard");如何在代码中获取工具条和状态条的指针 缺省时, 工作框创建状态条和工具条时将它们作为主框窗口的子窗口,状态条有一个AFX_IDW_STATUS_BAR标识符,工具条有一个AFX_IDW_TOOLBAR标识符,下例说明了如何通过一起调用CWnd: : GetDescendantWindow和AfxGetMainWnd来获取这些子窗口的指针:/Get pointer to status bar .CStatusBar * pStatusBar =(CStatusBar *) AfxGetMain

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论