windows程序设计实验报告Word格式.docx
《windows程序设计实验报告Word格式.docx》由会员分享,可在线阅读,更多相关《windows程序设计实验报告Word格式.docx(13页珍藏版)》请在冰点文库上搜索。
实验三、创建一个进程来运行一个应用程序8
一、实验要求和目的8
二、实验内容、程序清单及运行结果8
8
9
三、实验心得9
实验四、调整线程优先级10
一、实验要求和目的10
二、实验内容、程序清单及运行结果10
10
11
三、实验心得11
实验一、熟悉visualc++的编程环境
1.了解和使用VC集成开发环境
2.熟悉VC环境的基本命令和功能键,
3.熟悉常用的功能菜单命令
4.学习使用VC++环境的帮助
5.学习完整的C++程序开发过程
6.理解简单的C++程序结构
7.了解用VisualC++开发WindowsMFC应用程序的过程
1.编辑第一个C++程序
源程序代码:
//helloworldexample
#include<
iostream.h>
intmain(){
cout<
<
"
hello!
"
endl;
return0;
//正常返回
}
2.用AppWizard建立一个MFCWindows应用
在窗口中输出"
Hello,World!
,修改OnDraw函数的定义,在最后一行加一句:
pDC->
TextOut(50,50,"
Hello,World"
);
3.编写简单的计算程序
输入圆的半径,计算圆的周长和面积并输出。
//该程序让用户输入圆的半径Radius,输出圆的周长Perimeter和面积Area
math.h>
constdoublePI=3.14159;
//定义一个常量PI
intradius;
doubleperimeter,area;
Pleaseinputtheradius:
;
cin>
>
radius;
perimeter=2*PI*radius;
//周长=2πR
area=PI*radius*radius;
//面积=πR2
Theperimeterofthecircle:
<
perimeter<
endl;
Theareaofthecircle:
area<
通过本次实验我了解了VC集成开发环境及基本命令、功能键和功能菜单命令,学会了使用VC++环境的帮助,理解了完整的C++程序开发过程及简单的C++程序结构,了解用VisualC++开发WindowsMFC应用程序的过程.
实验二、对话框的使用
掌握Visualc++中对话框的使用
二、实验内容、程序清单及运行结果
使用资源编辑器编辑对话框在Windows开发中弹出对话框是一种常用的输入/输出手段,同时编辑好的对话框可以保存在资源文件中。
VisualC++提供了对话框编辑工具,利用编辑工具可以方便的添加各种控件到对话框中,而且利用ClassWizard可以方便的生成新的对话框类和映射消息。
1)使用AppWizard生成一个基于对话框的工程,工程名为DlgDemo,其他均选择VC的默认摄制。
2)在对话框资源编辑器中删除VC自动生成的[确定][取消]按钮以及Static控件.
3)给对话框添加按钮[显示模态对话框],ID更改IDC_MODAL,用来显示一个模态对话框;
给对话框添加按钮[显示非模态对话框],ID更改IDC_MODALESS,用来显示一个非模态对话框;
给对话框添加一个编辑控件和Static控件。
4)在资源编辑器中添加两个对话框资源IDD_MODAL和IDD_MODALESS.
5)用ClassWizard为对话框IDD_MODAL添加一个对话框类CmodalDlg。
6)为CdlgDemoDlg类的[显示模态对话框]按钮添加消息处理函数如下:
voidCDlgDemoDlg:
:
OnModal()
{
CModalDlgdlg;
dlg.DoModal();
在DlgDemoDlg.cpp文件中加入如下CmodalDlg类的定义文件:
#include"
ModalDlg.h"
7)使用ClassWizard给对话框IDD_MODALESS添加一个对话框类CmodalessDlg.
8)给CdlgDemoDlg类添加一个成员变量m_pModalessDlg.
private:
CModalessDlg*m_pModalessDlg;
在CdlgDemoDlg类的构造函数中加入如下代码:
CDlgDemoDlg:
CDlgDemoDlg(CWnd*pParent/*=NULL*/)
:
CDialog(CDlgDemoDlg:
IDD,pParent)
//{{AFX_DATA_INIT(CDlgDemoDlg)
//NOTE:
theClassWizardwilladdmemberinitializationhere
//}}AFX_DATA_INIT
//NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32
m_hIcon=AfxGetApp()->
LoadIcon(IDR_MAINFRAME);
m_pModalessDlg=NULL;
在DlgDemoDlg.h文件中加上如下语句:
ModalessDlg.h"
9)在CdlgDemoDlg类中给[显示非模态对话框]按钮添加消息映射函数如下:
voidCDlgDemoDlg:
OnModaless()
m_pModalessDlg=newCModalessDlg();
//检查指针是否有效
if(m_pModalessDlg!
=NULL)
{
BOOLret=m_pModalessDlg->
Create(IDD_MODALESS,this);
if(!
ret)
AfxMessageBox("
创建非模态对话框失败"
m_pModalessDlg->
ShowWindow(SW_SHOW);
}
else
10)给CdlgDemoDlg类映射WM_DESTROY消息,在WM_DESTROY消息的处理函数OnDestroy中小毁非模态对话框指针。
OnDestroy()
CDialog:
OnDestroy();
if(m_pModalessDlg)
m_pModalessDlg->
DestroyWindow();
m_pModalessDlg=NULL;
编译运行程序。
通过此次实验掌握了在掌握了Visualc++中对话框的使用,在VisualC++利用对话框编辑工具,学会了添加各种控件到对话框中。
学会利用ClassWizard可以方便的生成新的对话框类和映射消息。
实验三、创建一个进程来运行一个应用程序
一、实验要求和目的
掌握CreateProcess函数各个参数的使用方法.
使用该CreateProcess函数创建一个进程(通过调用Windows配备的应用程序附件如calc.exe等体现)
1)使用VisualC++创建一个单文档GUI应用程序项目;
可以在New–Projects选项卡上,选Win32Application。
在接下来的对话框中,选“Atypical“HelloWorld!
”application”。
2)在应用程序菜单中添加“运行”→“计算器”菜单(设“计算器”子菜单名为ID_RUN_CALC);
3)添加鼠标点击ID_RUN_CALC菜单的事件处理代码。
然后在相应的函数中写入相应代码,如:
STARTUPINFOsi={sizeof(si)};
TCHARszPath[MAX_PATH]=TEXT("
C:
\\WINNT\\system32\\calc.exe"
//计算器程序文件也可能在Windows目录下。
SECURITY_ATTRIBUTESsaProcess,saThread;
//定义进程对象和线程对象的安全性属性
PROCESS_INFORMATIONpiProcessB;
//定义创建进程的信息
saProcess.nLength=sizeof(saProcess);
saProcess.lpSecurityDescriptor=NULL;
saProcess.bInheritHandle=TRUE;
//设置进程安全属性
saThread.nLength=sizeof(saThread);
saThread.lpSecurityDescriptor=NULL;
saThread.bInheritHandle=FALSE;
//设置线程安全属性
CreateProcess(NULL,szPath,&
saProcess,&
saThread,FALSE,0,NULL,NULL,&
si,&
piProcessB);
//上述代码可以简化,可将saProcess和saThread参数均设置为NULL。
4)书写完毕,进行build,然后execute
点击“运行”→“计算器”菜单,将创建一个进程来运行计算器应用程序。
三、实验心得
通过本次实验,我学会了使用CreateProcess函数创建一个进程,并且掌握了CreateProcess函数各个参数的使用方法。
在实验的过程中,由于在修改文件的时候忘了修改路径,导致运行不出最终结果,最后在同学的帮助下才找到原因所在,得到了实验的最终结果。
实验四、调整线程优先级
掌握线程优先级的处理。
对于一个多线程应用程序,通过调用SetProcessPriorityBoost函数来禁止系统动态调整该进程中所有线程的优先级;
通过调用SetThreadPriority函数(也可以结合使用SetPriorityClass函数),来调整各线程的优先级;
然后通过一个进度条来显示各线程的运行进度;
或者通过调用GetThreadTimes函数来显示各线程获得的CPU时间。
1)使用VisualC++创建一个支持多线程的单文档GUI应用程序项目;
在ProjectSettings对话框,C/C++选项卡上,CodeGeneration类别,从Userun-timelibrary组合框中选定“MultithreadedDLL”。
2)创建线程函数,来完成一些工作。
如:
unsigned__stdcallThreadFunc(PVOIDpvParam){
DWORDi=0;
while(i<
100000000)
i++;
_endthreadex(0);
return(0);
3)禁止系统动态调整该进程中所有线程的优先级。
SetProcessPriorityBoost(GetCurrentProcess(),FALSE);
4)创建多个新线程。
HANDLEthread1,thread2,thread3;
unsignedthreadID;
thread1=(HANDLE)_beginthreadex(NULL,0,&
ThreadFunc,NULL,0,&
threadID);
thread2=(HANDLE)_beginthreadex(NULL,0,&
thread3=(HANDLE)_beginthreadex(NULL,0,&
注意:
要先#include<
process.h>
。
5)调整各线程的优先级。
SetThreadPriority(thread1,THREAD_PRIORITY_LOWEST);
SetThreadPriority(thread2,THREAD_PRIORITY_NORMAL);
SetThreadPriority(thread3,THREAD_PRIORITY_HIGHEST);
6)通过进度条来显示各线程的运行进度;
或者通过调用GetThreadTimes函数来显示各线程获得的CPU时间。
首先:
FILETIMEftCreationTime,ftExitTime,ftKernelTime,ftUserTime;
GetThreadTimes(thread1,&
ftCreationTime,&
ftExitTime,&
ftKernelTime,&
ftUserTime);
把KernelTime和UserTime加起来得到CPU时间,可以:
__int64time;
time=FileTimeToQuadWord(&
ftKernelTime)+FileTimeToQuadWord(&
其中,FileTimeToQuadWord函数的定义如下:
__int64FileTimeToQuadWord(PFILETIMEpft){
return(Int64ShllMod32(pft->
dwHighDateTime,32)|pft->
dwLowDateTime);
也许想把__int64time转换成字符串以便显示,可以调用_i64tot、_i64toa、或_i64tow函数,如:
TCHARtimestr[65];
_i64tot(time,timestr,10);
//转换成10进制数后再转换得到字符串。
这次实验是《Windows程序设计》进行的最后一次实验了,这次实验主要是对线程优先级进行处理:
线程的创建、调用、调节优先级、显示运行进度及CPU占用时间等功能。
通过本次实验我掌握了通过创建一些线程函数来完成一些工作。
掌握了线程的优先级调用步骤。