windows程序复习资料Word格式.docx
《windows程序复习资料Word格式.docx》由会员分享,可在线阅读,更多相关《windows程序复习资料Word格式.docx(22页珍藏版)》请在冰豆网上搜索。
编写一个Windows应用程序,首先应创建一个或多个窗口,随后应用程序的运行过程即是窗口内部、窗口与窗口之间、窗口与系统之间进行数据处理和数据交换的过程
●菜单(工具栏):
属于某个窗口,用户通过菜单向应用程序发送命令。
●对话框:
一种特殊的窗口,一般用于与用户交互。
●控件:
对话框中可以包含很多种控件,例如按钮、编辑框、列表框、滚动条等。
从本质上讲,控件也是窗口。
2、开发Windows应用程序的方法
(1)使用WindowsAPI函数:
API函数是Windows系统提供的编程接口,大致分为3类:
●窗口管理函数:
窗口的创建、移动、修改等。
●图形设备接口函数:
实现在窗口的客户区绘制图形和文本。
●系统服务函数:
实现与操作系统有关的多种功能,例如多线程控制等。
(2)使用MFC类库:
类库中存放了大量预先定义的类,以面向对象的思想封装了API函数,程序员可以直接将这些类放到自己的程序里。
(3)使用.NET框架类库
(4)使用其它类库(OWL、JAVASSH框架)
3、Windows应用程序中的数据类型
为了使程序的语义更加丰富,Windows在C语言的基础上自定义了很多种数据类型。
例如:
HWND无符号32位整数
HDC
HINSTANCE
……
DWORDunsignedlong
BOOLbool
BYTEunsignedchar
UINTunsignedint
注意:
Windows自定义数据类型的关键字都是大写
3、Windows应用程序中的数据类型
为了使Windows编程工作更为直观,微软公司的SDK软件包定义了大量的数据类型,如HWND、HINSTANCE、UINT、HDC、HPEN、HBRUSH、HANDLE等。
这些数据类型大部分实际上是32位整数。
(参见P3)
首先需要说明的是,这些数据类型不属于标准C++的范围,它们是微软公司自己使用typedef关键字定义的,目的是使编程更为方便。
另外,微软还定义了大量的符号常量(参见P4),如
WM_KEYDOWN、WM_PAINT、WM_CLOSE(消息号)
SW_SHOWSW_SHOWMINIMIZESW_SHOWMAXMIZE(窗口显示方式)
这些符号常量对应着一个具体的数值,例如:
#defineWM_KEYDOWN0x0100
#defineWM_KEYUP0x0101
#defineWM_MOUSEMOVE0x0100
在程序中当然可以直接使用具体数值,但很不方便,推荐使用符号常量。
数据类型和符号常量的定义带来两个结果:
一方面使初学者难以入门,觉得Windows程序晦涩难懂,一方面使程序更易维护和升级。
4、匈牙利表示法:
一个标识符可由多个英文单词组成,每个英文单词的第一个字母大写。
CreateWindow、ShowWindow、GetMessage
HWNDCreateWindow(
LPCTSTRlpClassName,//pointertoregisteredclassname
LPCTSTRlpWindowName,//pointertowindowname
DWORDdwStyle,//windowstyle
intx,//horizontalpositionofwindow
inty,//verticalpositionofwindow
intnWidth,//windowwidth
intnHeight,//windowheight
HWNDhWndParent,//handletoparentorownerwindow
HMENUhMenu,//handletomenuorchild-windowidentifier
HANDLEhInstance,//handletoapplicationinstance
LPVOIDlpParam//pointertowindow-creationdata
);
5、Windows对象与句柄
Windows对象是内存中构建的程序实体,Windows预定义了很多数据类型和数据结构,包括窗口、按钮、对话框、画笔、画刷、字体等。
我们编程序时要按照预定义的数据结构在内存中构建具体的对象,并使用API函数操纵这些对象,最终完成用户要求的功能。
句柄(handle)是应用程序中能够唯一表示对象的一个整数数值,通过句柄可访问句柄代表的对象,进行适当的操作。
形象地说,句柄是Windows世界里对象的身份证号码。
如HWND。
(P3)
注意:
C++对象与Windows对象是两个不同的概念,Windows对象是C语言概念上的数据集合,可以理解为Windows系统的组成部分。
而C++对象属于应用程序,是根据C++类构造的数据的集合,并拥有自己的行为----成员函数。
在MFC编程中,我们经常将一个C++对象与一个Windows对象关联起来,以面向对象的方式进行编程。
6、事件驱动
与传统的基于DOS的程序不同(我们学C语言时编制的程序都是传统的程序)。
Windows程序的运行是由事件驱动的。
所谓事件,指用户对计算机的一个操作,如敲击键盘、点击鼠标等。
(注:
Windows内核也可以产生事件。
)
开发基于DOS的程序时,程序开发者处于完全支配的状态,程序执行流程遵从程序员预先规定的路径。
Windows程序的执行顺序取决于事件发生的顺序。
以学生成绩管理系统为例:
如果选择增加一名学生,必须将这个操作进行到底,而如果是Windows程序,可以在操作中间切换到其他操作。
7、消息
所谓消息,是对事件的描述。
Windows系统为所有可能的事件都预定义了消息,当事件发生时,Windows就产生描述该事件的消息,并将其发往适当的应用程序,应用程序收到消息后执行与消息对应的代码段。
例如,当用户敲击键盘,便产生了两条消息:
WM_KEYDOWN和WM_KEYUP,它们分别对应某个键的按下与释放。
如果我们在程序中为这两个消息指定了代码段,该代码段将被执行。
程序的执行顺序由顺序产生的消息驱动,所以Windows程序设计的重点是编写处理消息的代码段。
程序员可根据消息类型编写程序以处理接收的消息,或者发出其他消息以驱动其他程序,但是不必预先确定消息产生的次序。
8、描述消息的C结构
typedefstructtagMSG{//msg
HWNDhwnd;
//Handletothewindowwhosewindowprocedurereceivesthemessage.
UINTmessage;
//Specifiesthemessagenumber
WPARAMwParam;
//Specifiesadditionalinformationaboutthemessage.Theexactmeaningdependsonthevalueofthemessagemember
LPARAMlParam;
//Specifiesadditionalinformationaboutthemessage.Theexactmeaningdependsonthevalueofthemessagemember.
DWORDtime;
//Specifiesthetimeatwhichthemessagewasposted.
POINTpt;
//Specifiesthecursorposition,inscreencoordinates,whenthemessagewasposted
}MSG;
MSG由Windows系统负责生成和填写,每发生一个事件,就会生成一个结构变量,然后放到消息队列中,等待应用程序将其取走。
9、消息循环
无论是用户消息还是系统消息,消息产生后首先交给操作系统,操作系统将消息暂存在消息队列里。
Windows为每个应用程序建立了消息队列。
可以同时为多个应用程序接收和分配消息。
由于程序的运行是事件驱动的,所以程序加载后便开始等待消息的到来,根据到来的消息内容执行各种不同的操作。
应用程序如何等待消息到来?
方法是在程序中编写一个无限循环语句,每一次循环都从自己的消息队列里取出一个消息,经过适当处理后发送给相应的窗口。
while(GetMessage(&
Msg,NULL,0,0))
{
TranslateMessage(&
Msg);
DispatchMessage(&
//分发消息,实际上是调用相应窗口函数
}
消息获取函数的原型:
BOOLGetMessage(
LPMSGlpMsg,//addressofstructurewithmessage
HWNDhWnd,//handleofwindow
UINTwMsgFilterMin,//firstmessage
UINTwMsgFilterMax//lastmessage
注:
如果第二个参数为NULL
GetMessageretrievesmessagesforanywindowthatbelongstothecallingthreadandthreadmessagespostedtothecallingthreadviaPostThreadMessage.
threadmessages表示线程消息,消息分为窗口消息和线程消息
Windwos应用程序具有相对固定的基本结构,由WinMain函数和WndProc函数构成。
●WinMain函数:
是所有Windows程序的入口,类似C语言的main函数,完成一系列的定义和初始化工作,并产生消息循环。
消息循环是整个程序运行的核心。
●WndProc函数:
窗口函数,与应用程序的某个窗口对应,发往窗口的消息由与之对应的窗口函数处理,编程的主要工作是编写WndProc函数。
注:
WinMain函数的名字是固定的,WndProc函数的名字可以自己指定,只要将它与某个窗口联系起来即可。
#include<
windows.h>
L