Win32程序(一)

来源:互联网 发布:2017年网络红歌 编辑:程序博客网 时间:2024/06/06 19:56

Windows程序分为“程序代码”和“UI(User Interface)资源”两大部分,两部分最后以RC编译器整合为一个完整的EXE档案。所谓UI资源是指功能菜单,对话框外貌,程序图标,光标形状等等东西。这些UI资源的实际内容是借助各种工具产生的,并以各种扩展名的文件存在的,如.ico,.bmp,.cur等等。程序员必须在一个所谓的资源描述文档(.rc)中描述他们。RC编译器(RC.EXE)读取RC文件的描述后将所有UI资源文件集中制作出一个.RES文件,再与程序代码结合起来,这才是一个完整的Windows可执行文件。

Windows程序的进行依靠外部发生的事件来驱动,程序不停等待(利用一个while循环),等待任何可能的输入,然后做判断,然后再做适当的处理。上述”输入“是由操作系统捕捉到后,以消息形式进入程序之中。如果对应用程序获得的各种“输入”进行分类,可以分为由硬件装置所产生的消息,放在系统队列中,以及由Windows系统或其他Windows程序传送过来的消息,放在程序队列中。

每一个Windows程序都应该有一个如下的循环:

MSG msg;

while(GetMessage(&msg,NULL,NULL,NULL))

{

TranslateMessage(&msg);

DispatchMessage(&mag);

}  //以上函数都是Windows API函数

应用程序所调用的Windows API函数是在“执行时期”才链接上的。 Windows API由操作系统本身(主要是Windows三大模块GD32.DLL,USER32.DLL和KERNEL32.DLL)提供。虽说动态链接是在执行时期才发生“链接”事实,但在链接时期,链接器仍需先为调用者(应用程序本身)准备一些适当的信息,才能够在执行时期顺利“跳”到DLL中执行。如果该API所属的函数库尚未加载,系统也才因此知道要先行加载该数据库。这些适当的信息放在所谓的“import函数库”中。

还有一些新的API并不在GDI,UESR和KERNEL三大模块中,而是放在诸如COMMDLG.DLL、TOOLHELP.DLL之中。如果需要使用这些APIs,链接是还要加上这些DLLs所对应的import函数库。(每个DLL都有对应的头文件.H)

并不是扩展名为.dll者才是动态链接函数库(DLL,Dynamic Link Library),事实上.exe,.dll,.fon,.mod,.drv,.ocx都是所谓的动态链接函数库。

消息,也就是上面出现的MSG结构,其实是Windows内设的一种数据格式:

typedef struct tagMSG

{

HWND hwnd;

UINT message;//WM_xxx,例如WM_MOUSEMOVE,WM_SIZE....

WPARAM wParam;

LPARAM lParam;

DWORD time;

POINT pt;

} MSG;

接受并处理消息的主角就是窗口。每一个窗口都应该有一个函数负责处理消息,程序员必须负责设计这个所谓的“窗口函数”。如果一个窗口获得一个消息,则这个窗口函数必须判断消息的类别,决定处理的方式。



0 0
原创粉丝点击