VC学习摘要1——关于windows程序的一般原理

1、消息(MSG)结构体

       typedef struct tagMSG {

           HWND hand;
           UINT message;
           WPARAM wParam;
           LPARAM lPARAM;
           DWORD time;
           POINT pt;
} MSG, *PMSG;
句柄(handle),资源的标识,操作系统要管理和操作这些资源,都是通过句柄来找到对应的资源。索引资源所占据的那块内存空间。
消息(message),用无符号整数表示,为了便于记忆,VC中定义了一些消息宏(以WM_开头)。
WPARAM和LPARAM实际也为整型,指示了关于消息的附加信息。譬如按下字母a键,发出的是WM_CHAR消息,但是并不知道按下的是哪一个字母,此时就会把a的ASCII码作为消息的附加信息。其中wParam表示字符的ASCII码。
DWORD指示了消息被传递出去的时间。
POINT是一个两个int类型构成的一个结构体,实际上定义了一个点,指示了当消息被传递时光标在屏幕的坐标。
 
2、windows程序中经常用到一类变量,它的每一位(bit)都对应某一种特征,当该变量某位为1时,表示有该位对应的那种特征,当该位为0时,即没有该位对应的特征,当变量中的某几位同时为1时,就表示同时具有几种特征的组合。这样,如果我们希望某变量具有多种特征的话,只需使用二进制OR(|)操作符将它们进行或运算相组合;如果我们希望在某一变量原有的特征上去掉其中的一个特征,则对所要去掉的特征取反(~)之后再和该变量进行与(&)运算就能够实现。同样,为了记忆的方便,也根据特征的英文大写定义了一些宏,该宏所对应的数值中仅有与该特征相对应的那一位(bit)为1,其余的bit都为0。
 
3、函数BeginPaint和EndPaint只能在响应WM_PAINT消息中使用。而函数GetDC和ReleaseDC则不能在相应WM_PAINT消息中使用,只能在响应其他的消息中使用。都要成对使用并且不能搞混淆。
 
4、__stdcall和__cdecl是两种不同的函数调用约定,前者是标准调用约定(PASCAL调用约定),后者是C语言调用约定。主要是定义了函数参数传递的顺序和堆栈清除这两个方面的差异。除了可变参数的API函数之外,其他API函数都是__stdcall的调用习惯,但是VC的编译选项缺省情况下默认的是__cdecl,因此如果要调用__stdcall的API函数的话,则必须在声明这些函数的原型时加上__stdcall的修饰符,以便对这个函数的调用使用__stdcall的调用约定。
 
5、关于windows程序结束的几个函数,DestroyWindow销毁窗口,然后发出WM_DESTROY消息,PostQuitMessage处理此消息请求系统线程退出,发出WM_QUIT消息到线程的消息队列中然后返回,而WinMain的white循环中的GetMessage函数接收到WM_QUIT函数则返回0值结束while循环,程序结束。
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值