个人考勤软件开发实例
作者:YangLanGuang
这个程序是一个个人考勤软件,它从系统时钟获取时间信息,只要上下班时按时在当日考勤栏内点击相应的栏目标题即可逐日记录下个人每天的工作时间,按月统计汇总,按年形成文件.可以随意查看过去的记录,也可把记录按月打印出来.在年汇总栏内可以选择要查看或打印的月份。
这个小程序是我的一个习作,希望与感兴趣的同好切磋交流。
本程序是一个基于对话框的实用程序,在基于对话框界面的程序中实现打印和打印预览是采用了非常规MFC方法。 基于对话框的程序原本是不含框架类CFrameWnd和视类CView对象的,为了实现打印和打印预览,需要在主对话框对象中创建子框架对象CChildFrame,再在子框架中创建子视类对象CChildView,打印和打印预览就在CChildView中完成。这部分内容基本上直接取自北京希望电子出版社出版的《Vsual
C++ 编程高手》一书中的例18\05,但要把书中的主框架CMainFrm改为子框架CChildFrame而置于主对话框管理之下。
具体做法如下:

CAttendanceDlg dlg;
之后立即把这个对象的指针信息存入CWinApp::m_pMainWnd 和附加的m_pMiddle中备用:
m_pMainWnd = &dlg;
m_pMiddle = &dlg;

CChildFrame* pFrame = new CChildFrame;
m_pChildFrame = pFrame;
pFrame-LoadFrame(IDR_MAINFRAME,
WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE, NULL,//,m_pMainWnd
NULL);
暂时将其显示状态置为隐藏: m_pChildFrame-ShowWindow(SW_HIDE);

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);
}

对于打印函数为:
m_pChildFrame-SendMessage(WM_COMMAND, ID_FILE_PRINT);
或对于打印预览函数为:
m_pChildFrame-ShowWindow(SW_SHOW);//将子框架CChildFrame显示状态置为显示
m_pChildFrame-SendMessage(WM_COMMAND, ID_FILE_PRINT_PREVIEW);//打印预览

CAttendanceApp* app=(CAttendanceApp*)AfxGetApp();
app-m_pMainWnd = this;//应用程序主窗口临时替换为子框架窗口
m_pView-ShowWindow(SW_SHOW);
SetActiveView(m_pView);
m_pView-OnFilePrintPreview(this);

pParent-ShowWindow(SW_HIDE);//将子框架CChildFrame显示状态重新置为隐藏
pParent-UpdateWindow();
CAttendanceApp* app=(CAttendanceApp*)AfxGetApp();
app-m_pMainWnd = app-m_pMiddle;//应用程序主窗口恢复为主对话框窗口
app-m_pMiddle-UpdateWindow();
这些后处理工作放在CWrapperView::OnEndPrintPreview(..)函数中的结尾处完成。


pDC)函数中完成。

DMORIENT_PORTRAIT 替换为 DMORIENT_LANDSCAPE 即可 阅读以上说明请参照程序的源代码。