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

VC++
几个数字信号处理算法程序
简易软盘镜像工具的实现及操作系统编写初步
教你使用正则表达式
C++ 扩展和嵌入 Python
拷贝构造和赋值操作符,C#和本机 C++ 代码的互用性
精通VC与Matlab联合编程(六)
精通VC与Matlab联合编程(五)
一个排序用的C++函数模板
浅析VC与MATLAB联合编程
C++编译器如何实现异常处理
文件重定义冲突的分析与解决
一步一步实现MFC扩展DLL中导出类和对话框
C宏:智者的利刃,愚者的恶梦!
引用的作用
《UTF-8与GB2312之间的互换》的改进
程序风格的要素-C++风格指南
VC+6.0实现文本串的自由拆分
怎样给串行化类分配版本号(可配置版本模式)
在常规的编程任务中使用新的 <tuple> 库
使用 typedef 抑制劣质代码

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 82 ::
收藏到网摘: 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的菜单资源