阅读本文前,我们假设您已经: 1,知道如何创建一个单文档的App Wizard 2,知道C++ 类、函数重载等简单知识 3,知道如何给View类或者Doc文档添加成员变量 4,会用MFC的IDE调试工具最好,那么本文的程序您可以copy去调试 5,知道如何为某个框架类添加虚函数或消息处理函数 更改标题栏图标 事先已经添加IDI_ICON1、IDI_ICON2、IDI_ICON3资源。注意要实现代码,须把变量定义成全局或者用其他方式 HICON m_hI1=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON1)); SetClassLong(m_hWnd,GCL_HICON,(LONG)m_h1); 一、在状态栏上添加时间显示 1,在String_Table中添加IDS_NEW 2,IDS_NEW添加到CMainFrame的indicator中 3,CMainFrame::OnCreate()中return 之前 CTime t=CTime::GetCurrentTIme(); //int index=m_wndStatusBar.CommandToIndex(IDS_NEW); //m_wndStatusBar.SetPaneText(index,str); //调整显示宽度 CClinetDC dc(this); 4,为适时更新设置定时器。在CMainFrame::OnTimer()中复制下面代码如下: CTime t=CTime::GetCurrentTIme(); //调整显示宽度 CClinetDC dc(this); 5,在CMainFrame::()启动计时器 SetTimer 二、进度栏 一)创建一个进度栏 1,在MainFrame.h中添加CProgressCtrl对象 CProgressCtrl m_progress; 2,在CMainFrame::OnCreate()中返回前创建之 m_progress.Create(WS_CHILD | WS_VISIBLE,CRect(100,100,200,120),this,123); 3,设置位置 m_progress.SetPos(50); 4,垂直进度栏 m_progress.Create(WS_CHILD | PBS_VERTICAL,CRect(100,100,120,200),this,123); 5,进度栏放入状态栏窗格 CRect r; m_wndStatusBar.GetItemRect(2,&r); //创建时大小和父窗口都改变 m_progress.Create(WS_CHILD | WS_VISIBLE |PBS_SMOOTH,r,&m_wndStatusBar,123); 以上即为实现代码,但是放在OnCreate函数中不能实现:因为OnCreate()返回前状态栏的位置还没有确定,所以无法获得各个子窗格位置,只能用自定义消息办法响应。 1)定义消息 在MainFrame.h前面添加 #define UM_PROGREE WM_USER 2)消息响应函数原形的声明宏 在MainFrame.h中添加 afx_msg void OnProgress();//可以添加两个参数 3)消息映射 在MainFrame.cpp中//}}AFX_MSG_MAP之后添加映射 ON_MESSAGE(UM_PROGRESS,OnProgress) 4)实现消息响应函数 void CMAinFrame::OnProgress() { CRect r; 5)在OnCreate()中发送消息 PostMessage(UM_PROGRESS);//注意不要用SendMessage(); 此时的进度栏在状态栏上的位置时固定的,不会随状态栏位置变化而变化 6)使进度栏与状态栏位置相关联 把OnCreate()中的PostMessage()删除使之失效. 首先添加OnPaint()消息函数 窗口改变重绘会发送WM_PAINT消息,所以只要在OnPaint函数中处理即可.以下代码添加到OnPaint()中 CRect r; m_wndStatusBar.GetItemRect(2,&r); if(!m_progress.m_hWnd)m_progress.Create(WS_CHILD | WS_VISIBLE,r,&m_wndStatusBar,123);//创建时大小和父窗口都改变 else m_progress.MoveWindow(r);//或者SetWindowPos()函数 m_progress.SetPos(50);
二)将移动坐标适时显示到状态栏上 1,添加OmMouseMove()函数 2,将状态栏变量访问权限改变,备用 在MainFrame.h中 m_wndStatusBar变量改为公用 3,在view.cpp中包含MainFrame.h 4,在OnMouseMove()中添加 CString s; s.Format("x=%d,y=%d",point.x,point.y); //将以下情况之一添加添加此处即可实现 1)((CMainFrame*)GetParent())->m_wndStatusBar.SetWindowText(str); 主框架状态栏ID号为AFX_IDW_STATUS_BAR 三、给软件增加启动画面 1,菜单Project=>Add to Project=>Component and Control,对话框中选择Visual C++ Components,选择Splash screen选择插入,选OK并关闭 2,系统自动增加CSplashWnd类; 在CMainFrame::OnCreate()中添加了CSplashWnd::SHowSplashScreen(this); 3,在CSplashWnd::OnCreate()中有SetTimer(1,750,NULL);设置750ms的启动画面显示间隔 4,自定义显示界面的话,可以依照这个类进行
|
欢迎以任何形式转载本文,只要对您有用 |
韦伯主页: http://mail.ustc.edu.cn/~bywang(提供此笔记系列相关源程序下载) 韦伯Blog: http://webbery.tianyablog.com |
参考书目和网站: |
(1)孙鑫VC++视频 |
(2)1-6章主要参考: hbyufan的BLog |
(3)11-20章主要参考: songpeng的Blog |