版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2.1.1简单的Windows应用程序
简单的Windows应用程序。
[例Ex_HelloMsg]一个最简单的Windows应用程序(1)运行MicrosoftVisualC++6.0后,选择“文件”
“新建”菜 单命令,打开应用程序向导,显示出“新建”对话框。2.1.1简单的Windows应用程序(2)在工程名称框中键入Win32应用程序项目名称elloMsg。(3)单击[确定]按钮继续。
(4)再次选择“文件”
“新建”菜单命令,显示出“新建”对话框。“新建”对话框文件页面2.1.1简单的Windows应用程序(6)在文档窗口中输入下面的代码:#include<windows.h>intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance
,LPSTRlpCmdLine,intnCmdShow){MessageBox(NULL,"你好,我的VisualC++世界!","问候",0);return0;}2.1.1简单的Windows应用程序编译并运行程序从上面的程序可以看出:WinMain函数的原型如下:intWINAPIWinMain(HINSTANCEhInstance, //当前实例句柄HINSTANCEhPrevInstance,
//以前的实例句柄LPSTRlpCmdLine,
//指向命令行参数的指针int
nCmdS
//窗口的显示状态
每一个Win32应用程序都需要Windows.h头文件,包含了一些Windows头文件。程序中,MessageBox是一个Win32PI(ApplicationProgrammingInterface,应用程序接口)函数,用来弹出一个对话框窗口,显示短信息。2.1.1简单的Windows应用程序[例Ex_HelloWin]一个较完成的Windows应用程序(1)按照Ex_HelloMsg示例方法,创建一个Anemptyproject类型的Win32Application(Win32应用程序)项目Ex_HelloWin。(2)选择“文件”
“新建”菜单命令,显示出“新建”对话框。单击“文件”标签,在左边的列表框中选择C++SourceFile项,在右边的“文件”框中键入Ex_HelloWin.cpp,单击[确定]按钮。(3)在文档窗口中输入代码:Ex_HelloMsg示例相比,Ex_HelloWin要复杂的多,可以将其分是两个基本函数的程序结构。
函数WndProc用来接收和处理各种不同的消息,而WinMain函数通常要完成以下几步工作:定义并调用API函数RegisterClass注册应用程序的窗口类。2.1.1简单的Windows应用程序函数CreateWindow用来创建已注册窗口类的窗口。CreateWindow函数具有下列原型:HWNDCreateWindow(LPCTSTR lpClassName,//已注册的窗口类名
LPCTSTR lpWindowName, //窗口标题
DWORD dwStyle, //窗口风格
int
x, //窗口的水平位置
int
y, //窗口的垂直位置
int
nWidth, //窗口宽度
int
nHeight, //窗口高度
HWND hWndParent,//父窗口句柄
HMENU hMenu, //菜单句柄或控件标识
HINSTANCEhInstance,//应用程序实例句柄
LPVOID lpParam
//其他窗口创建时的参数数据2.1.1简单的Windows应用程序API函数GetMessage
和DispatchMessage就是起到这样的作用。
如果接收到WM_QUIT消息,则退出应用程序。
(4)编译运行程序,窗口中单击鼠标左键,会弹出对话框。2.1.1简单的Windows应用程序Windows应用程序的基本流程:2.1.2Windows编程特点
完整的Windows应用程序除了WinMain函数外,包含用于处理用户动作和窗口消息的窗口函数。还会发现一个Windows应用程序还常常具有一些特性:
消息驱动机制图形设备接口(GDI)
基于资源的程序设计动态链接库1.消息驱动机制Windows程序和控制台应用程序之间一个最根本区别,在于控制台应用程序是通过调用系统函数来获得用户输入,而Windows程序则是通过系统发送的消息来处理用户输入。Windows操作环境中,无论是系统产生的动作或用户运行应用程序产生的动作,称为事件(Events)产生的消息(Message)。2.1.2Windows编程特点4.动态链接库在Windows操作系统中,最主要的DLL有KERNEL32.DLL、GDI32.DLL和USER32.DLL。
KERNEL32.DLL用来处理存储器低层功能、任务和资源管理等Windows核心服务;
GDI32.DLL提供图形设备接口,管理用户界面和图形绘制,包括Windows元文件、位图、设备描述表和字体等;
USER32.DLL负责窗口的管理,包括消息、菜单、光标、计时器及其它与控制窗口显示相关的一些功能。2.图形设备接口(GDI)
而Windows则提供了一个抽象的接口,称为图形设备接口,使得用户直接利用系统的GDI函数就能方便实现图形和文本的输出。基于资源的程序设计
Windows应用程序包含众多图形元素,如光标、菜单、工具栏、位图、对话框等。2.1.3Windows基本数据类型
Windows常用的基本数据类型:Windows所数据类型对应的基本数据类型说明BOOLbool布尔值BSTRunsignedshort*32位字符指针BYTEunsignedchar8位无符号整数COLORREFunsignedlong用作颜色值的32位值DWORDunsignedlong32位无符号整数,段地址和相关的偏移地址LONGlong32位带符号整数LPARAMlong作为参数传递给窗口过程或回调函数的32位值LPCSTRconstchar*指向字符串常量的32位指针LPSTRchar*指向字符串的32位指针LPVOIDvoid*指向未定义类型的32位指针LRESULTlong来自窗口过程或回调函数的32位返回值UINTunsignedint32位无符号整数WORDunsignedshort16位无符号整数WPARAMunsignedint当作参数传递给窗口过程或回调函数的32位值2.1.3Windows基本数据类型HINSTANCE和LPSTR等,这样的数据类型只是一些基本数据类型的别名,在Windows编程中常用的基本数据类型。
需要说明的是:这些基本数据类型都是用大写字符来表示,以与一般C++基本数据类型相区别。凡是数据类型的前缀是P或LP,则表示该类型是一个指针或长指针数据类型。若前缀是U,则表示无符号数据类型,等等。
Windows还提供一些宏来处理上述基本数据类型。例如,LOBYTE和HIBYTE分别用来获取16位数值中的低位和高位字节;LOWORD和HIWORD分别用来获取32位数值中的低位字和高位字;MAKEWORD是将两个16位无符号值结合成一个32位无符号值,等等。2.2.1绘制文本
Windows窗口通常有标题栏和边框,其中默认背景色为白色区域称为窗口的客户区。[例Ex_WinText]文本绘制(1)新建一个“Anemptyproject”类型的Win32pplication(Win32应用程序)项目Ex_WinText。(2)新建一个C++源文件(SourceFile)Ex_WinText.cpp。
(3)编译并运行程序,
Ex_WinText运行结果:2.2.1绘制文本TextOut函数是用来显示文本的最常用的GDI函数,有下列原型:
BOOLTextOut(HDC hdc,//设备描述表句柄
int
nXStart,//文本显示的水平起始位置
int
nYStart,//文本显示的垂直起始位置
LPCTSTR lpString,//要显示的文本
int
cbString
//要显示的文本长度hdc定义的是句柄HDC变量,TextOut等GDI函数都要通过这样的HDC句柄来绘制图形和文本。EndPaint用来释放设备描述表句柄,并使先前无效区域变为有效,使Windows不再发送M_PAINT消息。PAINTSTRUCT是“绘图信息结构”,BeginPaint和EndPaint函数都需要PAINTSTRUCT结构变量作为自己的参数。2.2.2使用控件
在Win32应用程序中,可在窗口基础上通过CreateWindow函数来创建一个控件窗口。
例Ex_WinControl]控件的使用
(1)新建一个“Anemptyproject”类型的Win32ApplicationWin32应用程序)项目Ex_WinControl。
(2)新建一个C++源文件(SourceFile)_WinControl.cpp,并输入代码(3)编译并运行程序,填入一元二次方程的系数后,单击[计算]按钮,求解的结果就会显示出来,2.3.1MFC概述
微软公司为应用程序设计者提供了Win16API,在此基础上推出了WindowsGUIMFC类的基本层次结构如图:CCmdTargetCWndCDocumentCFrameWndCObjectCWinTreadCWinAppCViewCDialog及控件CMDIChildWndCMDIFrameWndCMiniFrameWnd2.2.3设计一个MFC程序
例Ex_HelloMFC]一个MFC应用程序。(1)创建一个“Anemptyproject”类型的Win32Application(Win32应用程序)项目Ex_HelloMFC。(2)选择“文件”
“新建”菜单命令,显示出“新建”对话框。单击“文件”标签,在左边的文件类型列。(3)表框中选择C++SourceFile项,在右边的“文件”下的编辑框中键入Ex_HelloMFC.cpp,单击[确定]按钮。在文档窗口中输入代码。(4)选择“工程”
“设置”菜单命令,在出现的对话框中选择“General”标签。然后在“MicrosoftFoundationClasses”组合框中,选择“UseMFCinaSharedDLL”。单击[OK]按钮。
(5)程序运行后,单击鼠标左键,就会弹出一个对话框,结果同Ex_HelloWin。2.3.3理解程序代码
1.程序运行机制
MFC是使用afxwin.h来代替头文件windows.h,在Ex_HelloMFC程序中却看不到Windows应用程序所必须的程序入口函数inMain。自动查找该应用程序类CHelloApp的全局变量eApp,然后自动调用CHelloApp的虚函数InitInstance,该函数会进一步调用相应的函数来完成主窗口的构造和显示工作。首先执行的是:
m_pMainWnd=newCMainFrame();
然后执行后面两句,用作窗口的显示和更新。
m_pMainWnd->ShowWindow(m_nCmdShow);m_pMainWnd->UpdateWindow();最后返回TRUE,表示窗口创建成功。2.3.3理解程序代码映射一个消息的过程是由三个部分组成的:
(1)在处理消息的类中,使用消息宏LARE_MESSAGE_MAP()
声明对消息映射的支持,并在该宏之前声明消息处理函数。(2)使用BEGIN_MESSAGE_MAP和END_MESSAGE_MAP宏在类声明之后的地方定义该类支持的消息映射入口点,所有消息映射宏都添加在这里,当然不同的消息MFC都会有不同的消息映射宏。(3)定义消息处理函数。例如:voidCMainFrame::OnLButtonDown(UINTnFlags,CPointpoint){ MessageBox("你好,我的VisualC++世界!","问候",0); CFrameWnd::OnLButtonDown(nFlags,point);}2.3.4使用MFCAppWizard
表2.2MFCAppWizard创建的应用程序类型
名
称项
目ATLCOMMFCAppWizard创建ATL(ActiveTemplateLibrary)应用模块工程ClusterResourceTypeWizard创建ClusterResource(用于WindowsNT服务器)CustomMFCAppWizard创建自己的应用程序向导DatabaseProject创建数据库应用程序DevStudioAdd-inWizard创建ActiveX组件或VBScript宏ExtendedStoredProcWizard创建基于SQL服务器下的外部存储过程ISAPIExtensionWizard创建InternetServer程序MakeFile创建独立于VisualC++开发环境的应用程序MFCActiveXControlWizard创建ActiveXControl应用程序MFCAppWizard(dll)MFC的动态链接库MFCAppWizard(exe)一般MFC的Windows应用程序UtilityProject创建简单实用的应用程序Win32Application其他Win32的Windows应用程序Win32ConsoleApplicationWin32的控制台应用程序Win32Dynamic-LinkLibraryWin32的动态链接库Win32StaticLibraryWin32的静态链接
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 光伏组件制造工安全风险考核试卷含答案
- 记号笔制造工安全宣教知识考核试卷含答案
- 无机化学反应生产工岗前变更管理考核试卷含答案
- 2025-2026学年初中地理说课稿非洲
- 遗体防腐整容师绩效评估测试考核试卷含答案
- 2025-2026学年城市大脑音乐说课稿
- 2026年饮料及冷饮服务行业技术趋势研究报告及未来五至十年并购整合与集中度提升
- 2026年污水处理及其再生利用行业洞察报告及未来五至十年供需变化与价格趋势
- 2026年化纤织物染整精加工行业趋势洞察报告及未来五至十年可持续发展与长期价值评估
- 2026年生殖医学面试试题及答案
- 2026年乐山市人民医院招聘考试真题及答案解析
- 玻璃幕墙专项施工方案
- 2025年温州市鹿城区工会人员招聘考试试题及答案详解
- 护理病情观察课件
- 【课件】人民法院同步教学 2025-2026学年统编版道德与法治八年级下
- 2026年中科创达试工程师岗位笔目真题(考试直接用)附答案详解
- 短缺药品管理工作制度
- 2026届浙江省金丽衢十二校高三下学期第二次联考(二模)历史试题(含答案)
- GB/T 47047-2026海上结构物海上移动平台锚链轮
- 旅游景区管理培训课件
- 钢结构厂房柱安装施工方案
评论
0/150
提交评论