[学习笔记]Windows程序设计:第一章 起步

来源:互联网 发布:网络上课平台 编辑:程序博客网 时间:2024/05/06 10:55

详解你的第一个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):动态连接库

原创粉丝点击