windows程序设计初步(一)
所谓的Windows程序设计,应该就是调用Windows的API进行程序设计.进行Windows程序设计有两种方法:
我主要学习的使用SDK进行Windows方面的程序设计,使用开发工具是Visual C++ 6.0。
自从Brain W.Kernighan和Dennis M.Ritchie编著的《The C Progamming Language》出版以后,基本上所有的介绍程序设计语言方面的书都是从“Hello World”开始的。下面就先来开学Windows版的"Hello World".
# define WIN32_AND_MEAN
# include <windows.h>
# include <windowsx.h>
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdline,int nShowCmd)
{
MessageBox(NULL,"Hellow Windows Programming","Welcome",MB_OK | MB_ICONEXCLAMATION) ;
return 0 ;
}
注意,在创建项目时要选择WIN32 Appcation.
下面来对程序代码进行分析,以便理解Windows程序设计过程.
首先,第一行是
# define WIN32_AND_MEAN
知道C/C++编程的很容易看出,这只是一条预编译指令.上面也提到Windows程序设计有两种方法,MFC和SDK.
使用这条预编译指令就是确定头文件的包含逻辑,不要包含不需要的MFC头文件.
下面就是对两个头文件<Windows.h>,<windowsx.h>的包含.
<windows.h>就像一个"批量"的头文件包含,它包含了
大部分的进行windows程序设计所需要的头文件.包含了改头文件就需要在手工的显示包含其余的头文件了.
<widnowsx.h>该头文件包含了许多重要的宏和常量,使用该文件能够大大的简化windows编程.
下面介绍下,windows的其余的主要的头文件:
WINDEF.H 基本的类型定义.
WINNT.H 支持Unicode的类型定义
WINBASE.H 内核函数
WINUSER.H 用户接口函数
WINGDI.H 图形设备接口函数. 这些头文件定义了windows所有的数据类型,函数调用,数据结构和常数标识符.
我们知道每个应用程序程序都会有一个入口函数,C/C++的入口函数为main().而所有的windows应用程序的入口函数都是WinMain().
该函数在WINBASE.H声明如下:
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdline,int nShowCmd) ;
我们知道每个函数都有一个返回值,无疑的int就是WinMain的返回类型.
那么WINAPI标识符有什么意义呢?WINAPI标识符在WINDEF.H中定义如下:# define WINAPI _stdcall.从这个定义我们可以看出,
WINAPI实际是对函数调用的
约定,规定了函数的参数从右向左压入栈中.
下面详细的看下该函数的参数:
-
hinstance 这是个HINSTANCE类型的变量,是一个实例句柄.该句柄唯一的标识该程序,其他的windows函数可以使用该句柄作为参数调用该程序.
-
hprevinstance 这个参数已经不再使用.在旧的windows版本中用来跟踪当前应用程序其他实例(解释晕了,幸好不再使用).在32位版本中舍弃了,该参数永远为NULL.
-
lpcmdline 是一个空值终止的字符串指针.是程序运行时的附加参数.很少被程序代码使用.
-
ncmdshow.该参数是个整数,在程序启动时传递给应用程序,标识了怎样打开应用程序的窗口.windows为该参数定义了很多的以SW_开头的常量,表示应用程式启动时
各种各样的窗口显示情况.如下:
SW_HIOE:隐藏窗口并且激活另外一个窗口。
SW_MINIMIZE:最小化指定的窗口,并且激活在系统表中的顶层窗口。
SW_RESTORE:激活并显示窗口。如果窗口已经最小化或最大化,系统将以恢复到原来的尺寸和位置显示窗口(与SW_SHOWNORMAL相同)。
SW_SHOW:激活一个窗口并以原来的尺寸和位置显示窗口。
SW_SHOWMAXIMIZED:激活窗口并且将其最大化。
SW_SHOWMINIMIZED:激活窗口并将其目标化。
SW_SHOWMINNOACTIVE:将一个窗口显示为图标。激活窗口维持活动状态。
SW_SHOWNA:以窗口的当前状态显示窗口。激活窗口保持活动状态。
SW_SHOWNOACTIVATE:以窗口的最近一次的尺寸和位置显示窗口。激活窗口维持激活状态。
SW_SHOWNORMAL:激活并显示窗口。如果窗口最大化或最小化,系统将其恢复到原来的尺寸和位置(与SW_RESTORE相同)。
下面来继续看下MessagBox函数
该函数功能就是在在屏幕上显示多种样式的窗口,如:带有不同按钮个数的窗口
函数的声明如下:
int MessageBox(HWND hWnd,LPCTSTR IpCaption,UINT UType);
看下函数各个参数:
- hwnd 该信息框父窗口句柄.(句柄,简单来说就是唯一的标识窗体的一个整数).
- lptext 是一个字符串指针,指向在窗体显示的字符串.
- lpcation 也是个字符串指针,指向显示在窗口标题部分的字符串.
- utype 可以说是该信息框的显示类型.它可以是下面以MB_开头的几组常量的组合.
第一组常量是如下:(代表了显示空中显示的按钮)
- MB_OK 显示一个按钮:OK,默认值
- MB_OKCANCEL 显示两个按钮:OK,CANCEL
- MB_RETRYCANCEL 显示两个按钮:Retry,CANCEL
- MB_YESNO 显示两个按钮:YES,NO
- MB_YENOCANCEL 显示三个按钮:YES,NO,CANCEL
- MB_ABORTRETRYIGNORE 显示三个按钮:ABROT,RETRY,IGNORE
第二组常量如下:(代表了显示图标)
- MB_ICONEXCLAMATION 显示一个惊叹号的图标
- MB_ICONINFORMATION 一个椭圆加一个小写字母i的构成的图标
- MB_ICONQUESTION 一个问号图标
- MB_ICONSTOP 一个终止符图标.
可以从两组常量中任选常量使用'|'运算符组合,但是每组常量只能选择一个.
值得一说的是,MessageBox函数是有返回值的.可能的返回值如下:(根据按钮的不同)
值 |
选择的按钮 |
IDABORT | ABORT |
IDCANCEL | CANCEL |
IDIGNORE | IGNORE |
IDNO | NO |
IDOK | OK |
IDRETRY | RETRY |
IDYES | YES |
第一个windows程序的分析到此结束.