windows程序设计-第五版--读书笔记(1)---有些是书上文字拷贝

(1)理解WinMain函数各个参数的含义   

建立win32 Application应用程序

#include <windows.h>
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow)
{
  MessageBox(NULL,TEXT("hello ,windows xp!"),TEXT("helloMsg"),0);
  return 0;
}



WINDOWS.H是主要的含入文件,它包含了其它Windows表头文件,这些表头文件的某些也包含了其它表头文件。这些表头文件中最重要的和最基
本的是:
WINDEF.H 基本型态定义。
WINNT.H 支持Unicode的型态定义。
WINBASE.H Kernel函数。
WINUSER.H 使用者接口函数。
WINGDI.H 图形设备接口函数。


WinMain函数详解(转载)

在Windows应用程序中,我们可以认为 WinMain() 函数是程序的入口,在WINBASE.H中WinMain()的原型如下:

int
WINAPI
WinMain(
    HINSTANCE  hInstance,
    HINSTANCE  hPrevInstance,
    LPSTR  lpCmdLine,
    int  nShowCmd
    );

前面说过,资源存在于内存之后,那么一个每个程序运行之后,也被看做一个资源,它有一个属于自己的句柄,这个句柄就保存在变量 hInstance 中。

hPreInstance 表示当前实例的前一个实例的句柄,在Win32环境下,参数总是为NULL

lpCmdLine 用于存放传递给应用程序的参数,那么如何给应用程序传递参数?这里举几个例子:

1) 通过命令行传递参数:在命令行下输入 notepad hi.txt,这里hi.txt这个文件的路径(一个字符串)这个参数被传递给应用程序 notepad

2) 通过双击鼠标的操作:我们现在有一个 hi.txt 文档,我们在上面双击,那么hi.txt这个文件的路径将作为参数传递给 notepad,也就是说,双击操作可以把文件名作为参数传递给指定的Windows应用程序

3) 拖拽操作:我们可以把一个叫 hi.txt 的文档,拖拽到 notepad 的程序中,那么hi.txt这个文件的路径将作为参数传递给 notepad,也就是说,拖拽操作可以把文件名作为参数传递给指定的Windows应用程序


另外,这里稍微说明一下 WINAPI 这个宏定义:

#define WINAPI      __stdcall

在VC6.0下生成的WinMain函数,实际上是:

int APIENTRY WinMain(

    HINSTANCE hInstance,

    HINSTANCE hPreInstance,

    LPSTR         lpCmdLine,

    int              nCmdShow

);

APIENTRY 这个定义为:

#define APIENTRY    WINAPI

所以归根到底都是 __stdcall,这个是什么东西了?这里解释一下:

__stdcall一种调用约定(调用函数时候的一种约定),其他的调用约定有:

__cdecl 和 __fastcall

调用约定将决定一下内容:它决定以下内容:1)函数参数的压栈顺序,2)由调用者还是被调用者把参数弹出栈,3)以及产生函数修饰名的方法。
WIN32API使用的是__stdcall调用约定

标准C,C++使用的是__cdecl调用约定

__stdcall调用约定:函数的参数自右向左压栈,被调用的函数在返回前清理传送参数的内存栈

__cdecl调用约定:每一个调用它的函数都包含清空堆栈的代码,所以产生的可执行文件大小会比调用_stdcall函数的大。函数采用从右到左的压栈方式。注意:对于可变参数的成员函数,始终使用__cdecl的调用约定


(2)理解MessageBox函数各个参数的含义

MessageBox函数用于显示短信息。虽然,MessageBox显示的小窗口不具有什么功能,实际上它被认为是一个对话框。
MessageBox的第一个参数通常是窗口句柄。第二个参数是在消息框主体中显示的字符串,第三个参数是出现在消息框标题列上的字符串。上述例题中,这些文字字符串的每一个都被封装在一个TEXT宏中。通常您不必将所有字符串都封装在TEXT宏中,但如果想将您的程序转换为Unicode字符集,这确是一个好主意。

MessageBox的第四个参数可以是在WINUSER.H中定义的一组以前缀MB_开始的常数的组合。

#define     MB_OK                                                0x00000000L
#define     MB_OKCANCEL                                0x00000001L
#define     MB_ABORTRETRYIGNORE            0x00000002L
#define     MB_YESNOCANCEL                        0x00000003L
#define     MB_YESNO                                        0x00000004L
#define     MB_RETRYCANCEL                         0x00000005L


在本程序中,MessageBox返回数值1,但更严格地说它返回IDOK ,IDOK 在WINUSER.H中定义,等于1。根据在消息框中显示的其它按
钮,MessageBox函数还可返回IDYES 、IDNO 、IDCANCEL、IDABORT 、 IDRETRY 或IDIGNORE 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值