当前位置: 首页 > 图文教程 > 开发语言 > VC++ > 个人考勤软件开发实例

VC++
在类VC的界面实现中加入目录树
软件换肤技术在 BCB 中的实现
利用非模窗口生成MDI介面
报表输出轻松搞定
Windows 中不规则窗体的编程实现
解说Win32的窗口子类化
使用测试优先方法开发用户界面
一个简单的登录对话框的实现
一个简单的日记本程序
从资源中加载皮肤
一个在RichEdit中添加表情图象的类
ActiveSkin 4.3 软件换肤在VC中的实现
一种另类“关于(About)”对话框的动态显示方法
对话框打印预览及打印
关于如何换肤、子类化的解决方案
制作 MSN、QQ 的消息提示窗口
如何对 BCGControlBarPro 进行换肤
定制个性化的对话框窗口类
改变窗口中的光标形状
更新MFC中的视图,跟踪.NET Framework中的事件

VC++ 中的 个人考勤软件开发实例


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 89 ::
收藏到网摘: n/a

个人考勤软件开发实例
作者:YangLanGuang

下载本文源代码

这个程序是一个个人考勤软件,它从系统时钟获取时间信息,只要上下班时按时在当日考勤栏内点击相应的栏目标题即可逐日记录下个人每天的工作时间,按月统计汇总,按年形成文件.可以随意查看过去的记录,也可把记录按月打印出来.在年汇总栏内可以选择要查看或打印的月份。 这个小程序是我的一个习作,希望与感兴趣的同好切磋交流。

本程序是一个基于对话框的实用程序,在基于对话框界面的程序中实现打印和打印预览是采用了非常规MFC方法。 基于对话框的程序原本是不含框架类CFrameWnd和视类CView对象的,为了实现打印和打印预览,需要在主对话框对象中创建子框架对象CChildFrame,再在子框架中创建子视类对象CChildView,打印和打印预览就在CChildView中完成。这部分内容基本上直接取自北京希望电子出版社出版的《Vsual C++ 编程高手》一书中的例18\05,但要把书中的主框架CMainFrm改为子框架CChildFrame而置于主对话框管理之下。

具体做法如下:
1.在创建应用程序实例的InitInstance()函数中创建我们的主对话框对象:

	CAttendanceDlg dlg;
之后立即把这个对象的指针信息存入CWinApp::m_pMainWnd 和附加的m_pMiddle中备用:
	m_pMainWnd = &dlg;	m_pMiddle = &dlg;
2.在ClassWizard中为主对话框类导入OnCreate()函数,在其中创建子框架对象CChildFrame
	CChildFrame* pFrame = new CChildFrame;	m_pChildFrame = pFrame;	pFrame->LoadFrame(IDR_MAINFRAME,	WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE, NULL,//,m_pMainWnd	NULL);
暂时将其显示状态置为隐藏: m_pChildFrame->ShowWindow(SW_HIDE);

3.在子框架对象CChildFrame的OnCreate()函数中创建子视类对象CChildView
	CCreateContext context;	context.m_pNewViewClass = RUNTIME_CLASS(CChildView);	context.m_pCurrentFrame = this;	context.m_pCurrentDoc = NULL;	context.m_pLastView = NULL;	m_pView = STATIC_DOWNCAST(CChildView, CreateView(&context)); //CreateView(&context);	if(m_pView != NULL)	{	m_pView->ShowWindow(SW_HIDE);//暂时将其显示状态也置为隐藏	SetActiveView(m_pView);	}
4.在主对话框的打印或打印预览处理函数中只要向子框架CChildFrame发送相应的消息即可: 对于打印函数为:
	m_pChildFrame->SendMessage(WM_COMMAND, ID_FILE_PRINT);
或对于打印预览函数为:
	m_pChildFrame->ShowWindow(SW_SHOW);//将子框架CChildFrame显示状态置为显示	m_pChildFrame->SendMessage(WM_COMMAND, ID_FILE_PRINT_PREVIEW);//打印预览
5.在子框架CChildFrame的打印预览处理函数中需要将CWinApp::m_pMainWnd暂时替换为子框架CChildFrame的指针,并把子视类对象的显示状态激活后调用子视类对象的打印预览处理函数
	CAttendanceApp* app=(CAttendanceApp*)AfxGetApp();	app->m_pMainWnd = this;//应用程序主窗口临时替换为子框架窗口	m_pView->ShowWindow(SW_SHOW);	SetActiveView(m_pView);	m_pView->OnFilePrintPreview(this);
6.打印预览结束退出之前必须恢复原有的显示状态,并将CWinApp::m_pMainWnd恢复为主对话框:
	pParent->ShowWindow(SW_HIDE);//将子框架CChildFrame显示状态重新置为隐藏	pParent->UpdateWindow();	CAttendanceApp* app=(CAttendanceApp*)AfxGetApp();	app->m_pMainWnd = app->m_pMiddle;//应用程序主窗口恢复为主对话框窗口	app->m_pMiddle->UpdateWindow();
这些后处理工作放在CWrapperView::OnEndPrintPreview(..)函数中的结尾处完成。

7.最后还要为子框架创建一个标识为IDR_MAINFRAME的菜单资源