下载 > 资源分类 >  开发技术 >  C++ > 个人考勤软件开发实例配套代码 2.1版

个人考勤软件开发实例配套代码 2.1版

2003-12-09 上传大小:169KB
这个程序是一个个人考勤软件,它从系统时钟获取时间信息,只要上下班时按时在当日考勤栏内点击相应的栏目标题即可逐日记录下个人每天的工作时间,按月统计汇总,按年形成文件.可以随意查看过去的记录,也可把记录按月打印出来.在年汇总栏内可以选择要查看或打印的月份。
    这个小程序是我的一个习作,希望与感兴趣的同好切磋交流。
    本程序是一个基于对话框的实用程序,在基于对话框界面的程序中实现打印和打
印预览是采用了非常规MFC方法。
    基于对话框的程序原本是不含框架类CFrameWnd和视类CView对象的,为了实现打印和打印预览,需要在主对话框对象中创建子框架对象CChildFrame,再在子框架中创建子视类对象CChildView,打印和打印预览就在CChildView中完成。这部分内容基本上直接取自北京希望电子出版社出版的《Vsual C++ 编程高手》一书中的例185,但要把书中的主框架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的菜单资源,其中只需要打印和打印预览两项即可。

    8.打印的内容和页面布局都放在CChildView::OnDraw(CDC* pDC)函数中完成。

    9.函数CAttendanceApp::SetPrntOrientation()是用来强制设定打印方向为纵向的,在打印或打印预览中先要调用它。如果要设为横向则只要把其中的 DMORIENT_PORTRAIT 替换为 DMORIENT_LANDSCAPE 即可。
    10. 2.1版补充:可能是由于子框架、子视图成为对话框的子对象以后,致使本来在框架、视图中畅通的UPDATE_COMMAND_UI消息路由被阻断,造成打印预览对话框各个命令按钮不能正常地更新其命令状态,解决的办法是在 CMyPreviewView::OnDraw(CDC* pDC)函数的最后添加一行	m_pToolBar->OnUpdateCmdUI((CFrameWnd*)AfxGetApp()->m_pMainWnd,1);
或
m_pToolBar->PostMessage(WM_IDLEUPDATECMDUI,(WPARAM)TRUE);每当视图发生改变重画以后及时向预览视图补发UPDATE_COMMAND_UI消息,使工具条和状态条及时更新其状态。
 阅读以上说明请参照程序的源代码。
...展开收缩
综合评分:4.3(25位用户评分)
直接下载 开通VIP会员 免积分下载

评论共有0条

评论资源

您不能发表评论,可能是以下原因:

登录后才能评论

待评论资源
 

热门专辑

关闭
img

spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip

CSDN VIP年卡 4000万程序员的必选现在开通,立省522元
下载
img

个人考勤软件开发实例配套代码 2.1版

会员到期时间:剩余下载个数:
VIP下载

积分不足!

资源所需积分 当前拥有积分
您可以选择
开通VIP年卡
4000万
程序员的必选
600万
绿色安全资源
现在开通
立省522元
或者
购买C币兑换积分 C币抽奖
img
资源所需积分 当前拥有积分
VIP年卡全年1200个资源免积分下载促销价78元,开通立省522元
下载
下载

兑换成功

你当前的下载分为234开始下载资源
你还不是VIP会员
开通VIP会员权限,免积分下载
立即开通

你下载资源过于频繁,请输入验证码

你下载资源过于频繁,请输入验证码

您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:webmaster@csdn.net!

举报

若举报审核通过,可奖励20下载分

  • 举报人:
  • 被举报人:
  • 举报的资源分:
  • *类型:
  • *详细原因: