1、 要求:工具栏上的按钮和菜单项的命令要求统一,视图窗口显示的时间为动态显示。提示:主要涉及菜单栏、工具栏和状态栏资源,使用定时器控制时间。二.程序设计步骤(1)根据MFC应用程序的方法,利用MFC App Wizard创建一个单文档应用程序,命名为7Time;(2)添加菜单项”时间”,并在”时间”下有”时”,”分”,”秒”三个菜单,如图: 并修改其ID值:标识号(ID)标题(Caption) 消息响应函数时间(&T)ID_VIEW_HOUR时(&H)OnViewHour()ID_VIEW_MINUTE 分(&M)OnViewMinute()ID_VIEW_SECOND秒(&S)OnViewSe
2、cond()并添加相应函数.新建新的工具栏:并设置各按钮的IDID_TIMEOnToolTime()ID _HOUROnToolHour()ID _MINUTE OnToolMinute()ID _SECONDOnToolSecond()由于需要新建一个新的工具栏所以到MainFrm.h中添加: CToolBar m_wndToolBar1;并到MainFrm.cpp中添加:if (!m_wndToolBar1.Create(this) | !m_wndToolBar1.LoadToolBar(IDR_TimeBAR) TRACE0(Failed to create toolbarn); re
3、turn -1; / fail to create m_wndToolBar1.ModifyStyle(0, TBSTYLE_FLAT);.m_wndToolBar1.EnableDocking(CBRS_ALIGN_ANY);DockControlBarLeftOf(&m_wndToolBar1,&m_wndToolBar);为了实现新的工具栏可以出现在老工具栏的右侧,所以才头文件中添加 void CMainFrame:DockControlBarLeftOf(CToolBar* Bar, CToolBar* LeftOf) CRect rect; DWORD dw; UINT n; Rec
4、alcLayout(TRUE); LeftOf-GetWindowRect(&rect); rect.OffsetRect(1,0); dw=LeftOf-GetBarStyle(); n = 0; n = (dw&CBRS_ALIGN_TOP) ? AFX_IDW_DOCKBAR_TOP : n;CBRS_ALIGN_BOTTOM & n=0) ? AFX_IDW_DOCKBAR_BOTTOM :CBRS_ALIGN_LEFT & AFX_IDW_DOCKBAR_LEFT :CBRS_ALIGN_RIGHT & AFX_IDW_DOCKBAR_RIGHT : DockControlBar(B
5、ar,n,&为了实现动态显示时间的效果,所以建立计时器添加计时器实现函数:CDC* pDC=GetDC(); CMainFrame *pFrame=(CMainFrame*)AfxGetMainWnd(); CString str; CTime tm; if(nIDEvent=1) tm = CTime:GetCurrentTime(); str = (CString)tm.Format(时=%H pDC-TextOut(100,200,str); ; if(nIDEvent=2)分=%M if(nIDEvent=3)秒=%S if(nIDEvent=4) tm=CTime:/得到当前时间 s
6、tr=(CString)tm.Format(%H:%M:%S/转换时间格式 pFrame-m_wndStatusBar.SetPaneText(0,str); /显示时钟接下来添加个按钮的实现函数:KillTimer(1); KillTimer(2); KillTimer(3); /KillTimer(4); CDC* pDC=GetDC(); tm = CTime: str = (CString)tm.Format( pDC-TextOut(100,200, SetTimer(1,3600000,NULL);/安装定时器,设定为1000毫秒=1秒 /KillTimer(1);以相同的方法添加
7、void CMainFrame:OnViewMinute() KillTimer(1); SetTimer(2,60000,NULL);/安装定时器,设定为1000毫秒=1秒 /KillTimer(2);OnViewSecond() SetTimer(3,1000,NULL); /KillTimer(3);添加工具栏按钮的实现功能:OnToolHour() / TODO: Add your command handler code here OnViewHour();OnToolMinute() OnViewMinute();OnToolSecond() OnViewSecond();OnTo
8、olTime() CTime time; time=CTime: str=time.Format( pFrame- /pFrame-m_wndStatusBar.SetPaneText(pFrame-m_wndStatusBar.CommandToIndex,str) /pDC- SetTimer(4,1000,NULL);最后在程序结束时终止计时器4:OnClose() KillTimer(4); CFrameWnd:OnClose();三程序运行结果四.实验小结:回顾起此次VC+课程设计,我仍感慨颇多,学到了很多的东西。同时不仅巩固了以前所学过的知识,而且还学到了很多在书本上所没有学到过的
9、知识。在实际设计中才发现,书本上理论性的东西与在实际运用中的还是有一定的出入的,所以有些问题不但要深入地理解,而且要不断地更正以前的错误思维。一切问题必须要靠自己一点一滴的解决,而在解决的过程当中你会发现自己在飞速的提升。通过这次课程设计我发现VC+应用性很强,只有老师的讲解不行,只看也不中,只有自己动手去做才会发现自己确实有太多的不足,许多程序看似简单,真正去做才知道知识并没有自己想象的那样扎实。从而懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。树立了对自己工作能力的信心,相信会对今后的学习工作生活有非常重要的影响。而且大大提高了实践的能力,使我充分体会到了在创造过程中探索的艰难和成功时的喜悦。在设计完成之际再次衷心感谢赵鸿图老师的指导!5参考文献VC+教程(高校规则教材)清华出版社VC+程序设计教程中国水利水电