详解你的第一个Windows程序——Hello, Windows!
一、体验Windows下的Hello,world
和字符模式版本的程序一样,Windows对应的“Hello, world”程序包括了同样的组成部分,即include语句、程序入口WinMain、函数调用,以及return语句。
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
MessageBox(NULL, TEXT("Hello, Windows!"), TEXT("HelloMsg"), 0);
Return 0;
}
windows.h是一个重要的包含文件,它囊括了若干其他Windows头文件
二、详解WinMain函数
程序入口函数WinMain的返回值被定义为int。WINDEF.H中对WINAPI标识符的定义:
#define WINAPI __stdcall
这条语句规定了一种函数的调用约定,表明如何生成在堆栈中放置函数调用参数的机器代码。
WinMain的第一个参数(hInstance)叫做“实例句柄”。句柄就是一个数值,程序的唯一标识。
WinMain的第二个参数(hPrevInstance)当创建多个实例时,同一程序的所有的实例都共享代码以及只读存储(即菜单或对话框模板之类的资源)。程序可以通过查看hPrevInstance参数从面知道是否有它的其他实例正在运行。它也就可以因此跳过某些步骤,把一些数据从前一个实例搬到自己的数据区来。在32位Windows中,这一概念已不再采用。因此WinMain的第二个参数通常总的NULL(定义为0)。
WinMain的第三个参数(szCmdLine)是用来运行程序命令行(Comman Line)。有些Windows程序在启动时用它来把文件装入内存。
WinMain的第四个参数(iCmdShow)用来指示程序最初如何显示(可选择的值参见MSDN)
三、详解MessageBox
MessageBox的定义为:
int MessageBox(
HWND hWnd, // handle to owner window
LPCTSTR lpText, // text in message box
LPCTSTR lpCaption, // message box title
UINT uType // message box style
);
MessageBox的第一个参数(HWND)是弹出的消息框的父窗口的句柄,直接表现为,消息框没关闭之前,那个窗口是无法操作的,如设置NULL则直接作为桌面窗口的子窗口。
MessageBox的第二个参数为消息框的内容。第三个参数为消息框的标题。
MessageBox的第四个参数为产生的消息框是哪种风格,如按钮,图标等,具体参见MSDN,组合使用请用c语言中的|(或)去除使用|~(或 非)。
第二、三个参数中将文本都装进TEXT的宏代码中,一般来说,并不需要把所有的字符串都打包到TEXT宏代码里面,可以直接使用字符串,例如"Hello, Windows!"。之所以这样做是因为这样在把程序转换成UNICODE时会方便很多。因为当UNICODE被定义时字符串将用宽字符存储——也就是说,每个字符占用2个字节,而宽字符的字符串使用时应使用L(大写字母)紧接左引号,例如L"Hello, Windows!"。当UNICODE没被定义时可以直接使用字符串,例如"Hello, Windows!"。而使用TEXT宏就会方便多了,不用考虑UNICODE是否被定义。
如果UNICODE标识符被定义了,那么__TEXT的宏则定义如下:
#define __TEXT(quote) L##quote //##被称为“令牌粘贴”它使得字母L和宏参数拼接在一起
如果UNICODE标识符被定义了,那么__TEXT的宏则定义如下:#define __TEXT(quote) quote
而不管怎样,TEXT宏可如下定义:#define TEXT(quote) __TEXT(quote)
即:
#ifdef UNICODE
#define __TEXT(quote) L##quote
#else
#define __TEXT(quote) quote
#endif
#define TEXT(quote) __TEXT(quote)
UNICODE的定义方法为:project->setting->c/c++
如果有_MBCS,删除掉。_MBCS表示ANSI或者GB2312编码。添加上_UNICODE,UNICODE。
英文缩写:
1、API(Application Programming Interface):应用程序编程接口
2、GUI(Graphical User Interface):图形用户界面
3、WYSIWYC(What you see is what you get):所见即所得
4、GDI(Graphics Device Interface):图形设备接口
5、DLL(Dynamic Linking Library):动态连接库