实验10基于单文档程序设计.docx
《实验10基于单文档程序设计.docx》由会员分享,可在线阅读,更多相关《实验10基于单文档程序设计.docx(26页珍藏版)》请在冰豆网上搜索。
实验10基于单文档程序设计
实验10基于单文档程序设计
实验目的:
掌握单文档程序的基本架构,掌握菜单项的添加,成员函数的定义
实验内容:
建立单文档程序,要求如下,启动界面如下
1建立如下启动界面,保持2秒:
2建立菜单:
计算器,调用计算器程序
3建立如下界面,
点击添加人员信息,则弹出如下对话框
输入信息后,在编辑框中显示
实验步骤:
(基于MFC应用程序实现。
)
1、在VC中创建基于视图的程序框架
通过菜单“File/New”,打开新建对话框。
选择“MFCAppWizard[exe]”,在“Projectname”中输入适当的程序名称,在“Location”中设置好保存目录。
在”Step1”中选“Singledocument”
向导完成后的详细表单
2添加展示界面
复制“192.168.2.10\实验室文件\面向对象程序设计(龚志鹏)\实验10资源”内文件到本人项目中。
在自己的项目中添加“SplashWnd.h”与“SplashWnd.cpp”文件。
2.1添加“SplashWnd.cpp”文件
2.2添加“SplashWnd.h”文件
2.3插入图象资源作为软件启动画面
通过菜单“Insert/Resouce…”,插入图象作为资源。
导入图片“Import”
确定
更改资源ID为“IDB_SPLASH1”
2.4修改“SplashWnd.cpp”文件
修改“SplashWnd.cpp”中对头文件的引用,使之符合自已的项目。
例:
“SplashWnd.cpp”文件内容:
//SplashWnd.cpp:
implementationfile
//
#include"stdafx.h"
#include"test10.h"//修改,使之与本项目一致
#include"SplashWnd.h"
#ifdef_DEBUG
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#endif
////////////////////////////////////////////////////////////////////////////
//SplashScreenclass
BOOLCSplashWnd:
:
c_bShowSplashWnd;
CSplashWnd*CSplashWnd:
:
c_pSplashWnd;
CSplashWnd:
:
CSplashWnd()
{
}
CSplashWnd:
:
~CSplashWnd()
{
//Clearthestaticwindowpointer.
ASSERT(c_pSplashWnd==this);
c_pSplashWnd=NULL;
}
BEGIN_MESSAGE_MAP(CSplashWnd,CWnd)
//{{AFX_MSG_MAP(CSplashWnd)
ON_WM_CREATE()
ON_WM_PAINT()
ON_WM_TIMER()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
voidCSplashWnd:
:
EnableSplashScreen(BOOLbEnable/*=TRUE*/)
{
c_bShowSplashWnd=bEnable;
}
voidCSplashWnd:
:
ShowSplashScreen(CWnd*pParentWnd/*=NULL*/)
{
//if(!
c_bShowSplashWnd||c_pSplashWnd!
=NULL)
//return;
//Allocateanewsplashscreen,andcreatethewindow.
c_pSplashWnd=newCSplashWnd;
if(!
c_pSplashWnd->Create(pParentWnd))
deletec_pSplashWnd;
else
c_pSplashWnd->UpdateWindow();
}
BOOLCSplashWnd:
:
PreTranslateAppMessage(MSG*pMsg)
{
if(c_pSplashWnd==NULL)
returnFALSE;
//Ifwegetakeyboardormousemessage,hidethesplashscreen.
if(pMsg->message==WM_KEYDOWN||
pMsg->message==WM_SYSKEYDOWN||
pMsg->message==WM_LBUTTONDOWN||
pMsg->message==WM_RBUTTONDOWN||
pMsg->message==WM_MBUTTONDOWN||
pMsg->message==WM_NCLBUTTONDOWN||
pMsg->message==WM_NCRBUTTONDOWN||
pMsg->message==WM_NCMBUTTONDOWN)
{
c_pSplashWnd->HideSplashScreen();
returnTRUE;//messagehandledhere
}
returnFALSE;//messagenothandled
}
BOOLCSplashWnd:
:
Create(CWnd*pParentWnd/*=NULL*/)
{
if(!
m_bitmap.LoadBitmap(IDB_SPLASH1))//通过资源号“IDB_SPLASH1”加载图像文件
returnFALSE;
BITMAPbm;
m_bitmap.GetBitmap(&bm);
returnCreateEx(0,
AfxRegisterWndClass(0,AfxGetApp()->LoadStandardCursor(IDC_ARROW)),
NULL,WS_POPUP|WS_VISIBLE,0,0,bm.bmWidth,bm.bmHeight,pParentWnd->GetSafeHwnd(),NULL);
}
voidCSplashWnd:
:
HideSplashScreen()
{
//Destroythewindow,andupdatethemainframe.
DestroyWindow();
AfxGetMainWnd()->UpdateWindow();
}
voidCSplashWnd:
:
PostNcDestroy()
{
//FreetheC++class.
deletethis;
}
intCSplashWnd:
:
OnCreate(LPCREATESTRUCTlpCreateStruct)
{
if(CWnd:
:
OnCreate(lpCreateStruct)==-1)
return-1;
//Centerthewindow.
CenterWindow();
//Setatimertodestroythesplashscreen.
SetTimer(1,2000,NULL);//定时器1
return0;
}
voidCSplashWnd:
:
OnPaint()
{
CPaintDCdc(this);
CDCdcImage;
if(!
dcImage.CreateCompatibleDC(&dc))
return;
BITMAPbm;
m_bitmap.GetBitmap(&bm);
//Painttheimage.
CBitmap*pOldBitmap=dcImage.SelectObject(&m_bitmap);
dc.BitBlt(0,0,bm.bmWidth,bm.bmHeight,&dcImage,0,0,SRCCOPY);
dcImage.SelectObject(pOldBitmap);
}
voidCSplashWnd:
:
OnTimer(UINTnIDEvent)
{
//Destroythesplashscreenwindow.
HideSplashScreen();
}
BOOLCSplashWnd:
:
PreTranslateMessage(MSG*pMsg)
{
//TODO:
Addyourspecializedcodehereand/orcallthebaseclass
if(c_pSplashWnd==NULL)
returnFALSE;
//Ifwegetakeyboardormousemessage,hidethesplashscreen.
if(pMsg->message==WM_KEYDOWN||
pMsg->message==WM_SYSKEYDOWN||
pMsg->message==WM_LBUTTONDOWN||
pMsg->message==WM_RBUTTONDOWN||
pMsg->message==WM_MBUTTONDOWN||
pMsg->message==WM_NCLBUTTONDOWN||
pMsg->message==WM_NCRBUTTONDOWN||
pMsg->message==WM_NCMBUTTONDOWN)
{
c_pSplashWnd->HideSplashScreen();
returnTRUE;//messagehandledhere
}
returnCWnd:
:
PreTranslateMessage(pMsg);
}
2.5引用“CSplashWnd”类,为程序显示展示画面
在“MainFrm.cpp”中引用“CSplashWnd”类
修改“MainFrm.cpp”文件中的“CMainFrame:
:
OnCreate”代码,添加代码
CSplashWnd:
:
ShowSplashScreen(this);//显示展示画面
如下图
3添加新视图
使用菜单“Insert/NewForm”,打开“NewForm”对话框
编程者自己输入合适的名称,本例子输入视图名称”myview1”,
建立如下视图
在视图上添加标签、命令按钮、文本框等控件,修改为如下界面
添加控件变量
添加按钮响应代码
voidmyview1:
:
OnButton1()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
qhinputqhin1;//参数输入对话框类
CStringc1;
qhin1.DoModal();//调用参数输入对话框
c1.Format("欢迎:
%s,%d岁.\r\n",Cname1,nYear1);
m_ed1+=c1;
UpdateData(false);
}
为“myview1”类添加全局变量“Cname1”、“nYear1”声明
将"myview1"视设置为本项目视图
修改"*App"类的"InitInstance()"方法,使之如下图所示
修改"myview1"为本人项目视图名称
修改"CMainFrame"类的"PreCreateWindow"方法,使之如下图所示
添加代码如下
4添加参数输入对话框
参照实验9,新建对话框,并为此对话框建立类“qhinput”,界面修改为如下图所示
添加控件变量
添加按钮响应代码
voidqhinput:
:
OnOK()
{
//TODO:
Addextravalidationhere
UpdateData(true);
Cname1=m_var1;
nYear1=m_var2;
CDialog:
:
OnOK();//关闭对话框
}
为“qhinput”类添加全局变量“Cname1”、“nYear1”声明
5添加全局变量“Cname1”、“nYear1”
CStringCname1;
intnYear1;
变量定义如下图
6添加菜单
打开菜单资源
修改,添加“计算器”菜单
添加消息
调试时需要将实验9的相关EXE文件及INI文件复制到本项目中,发布运行时需要将实验9的相关EXE文件及INI文件复制到与本项目EXE文件一个目录中。
添加代码如下,”WinExec”函数用来执行外部EXE文件,在本例中是执行“dgtest.exe”,此处应修改为与你实验9的EXE文件名一致。
7、编译运行程序