win32笔记2

来源:互联网 发布:windows live id格式 编辑:程序博客网 时间:2024/06/16 02:43

笔记:

  窗口类附加数据缓冲区的用法

1.申请缓冲区 int cbClsExtra; 一般赋4的倍数  200

2.向缓冲区中存入数据  setClassLong

  DWORD SetClassLong(

     HWND hWnd,   //窗口句柄  

     Int nIndex,   //字节索引号(从哪个字节开始存) 0 最大196

     Long dwNewLong  //存入的数据

);

3.从缓冲区中读取数据  GetClassLong

 DWORD GetClassLong(

     HWND hWnd,   //窗口句柄  

     Int nIndex,   //字节索引号(从哪个字节开始读) 0 最大196

);//返回值获取读到的数据

窗口附加缓冲区的用法

1.申请缓冲区 int cbWndExtra;  一般是4的倍数

2.向缓冲区存入数据:SetWindowLong

LONG SetWindowLong(

HWND hWnd;

Int nIndex;

LONG dwNewLong;

);

3.从缓冲区读取数据:GetWindowLong

LONG GetWindowLong(

   HWND hWnd;  Int nIndex;

);

  窗口的附加数据缓冲区:是窗口自己私有的缓冲区,即便是基于同一个窗口类创建出来的窗口相互之间也不共享.

 

区别:

  窗口类附加数据缓冲区:是基于同一个窗口类创建出来的所有窗口共享的缓冲区

ShowWindow(hWnd,...)

{

 hWnd->保存窗口

}

程序执行机制

 过程驱动-程序的执行过程是按照预定好的顺序执行

 事件驱动-程序的执行是无序,用户可以根据需要随机触发相应的事件.

Win32窗口程序就是采用事件驱动方式执行,也就是消息机制.

当系统通知窗口工作时,就采用消息的方式派发给窗口

消息组成(windows平台下)

窗口句柄

消息ID

消息的两个参数(附带信息)

消息产生的时间

消息产生时的鼠标位置

每一个窗口都必须具有窗口处理函数

当系统通知窗口时,会调用窗口处理函数同时将消息ID和消息参数传递给窗口处理函数.

在窗口处理函数中,不处理的消息,使用缺省窗口处理函数

GetMessage 获取本进程的消息

  BOOL GetMessage(

  LPMSG lpMsg,//存放获取到的消息BUFF

  HWND hWnd,//窗口句柄

  UINT wMsgFilterMin ,//获取消息的最小ID 0

  UINT wMsgFilterMax, //获取消息的最大 ID 10

);

LpMsg -当获取到消息后,将消息的参数存放到MSG结构中.

hWnd - 获取到hWnd所指定窗口的消息.

wMsgFilterMin/Max -只能获取到由他们指定的消息范围内的消息,如果都为0,表示没有范围.

WM_CREATE -在窗口创建成功还未显示之前,收到这个消息.常用于初始化窗口的参数,资源等等,包括创建子窗口等.

LPARAM -是CREATESTRUCT结构的指针,保存了CreateWindowEx中的12个参数

WM_SIZE -在窗口大小发生变化后,会收到WM_SIZE常用于窗口大小变化后,调整窗口内各个部分的布局,

  WPARAM -窗口大小变化的原因

  LPARAM -变化窗口客户区的大小

LOWORD  -变化后的宽度

HIWORD  -变化后的高度

WM_QUIT  用于结束消息循环处理

 wParam-PostQuitMessage  函数传递的参数,lParam -不使用

GetMessage收到这个消息后,会返回FALSE,结束 while处理,退出消息循环.

WM_QUIT不会进入窗口处理函数  不用我们处理

WM_PAINT  -绘图消息

键盘消息

鼠标消息

定时器消息

GetMessage -从操作系统获取消息,将消息从系统中移除,阻塞函数.当系统无消息时,GetMessage会等候下一条消息.

.PeekMessage  -以查看的方式从系统获取消息,可以不将消息从系统移除,非阻塞函数,当系统无消息时,返回FALSE,继续执行

BOOL PeekMessage(

  LPMSG lpMsg,      //message information

  HWND hWnd,        //handle to window

  UINT wMsgFilterMin, //first message

UINT wMsgFilterMax,  //last message

UINT wRemoveMsg    //移除标识

);

SendMessage - 发送消息,会等候消息处理的结果

PostMessage - 投递消息,消息发出后立刻返回,不等候消息执行结果

 

 

BOOL SendMessage/PostMessage(

HWND hWnd,               //消息发送的目的窗口

UINT Msg,               //消息ID

WPARAM wParam,          //消息参数

LPARAM lParam           //消息参数

);

消息的类型

1.系统消息  ID范围 0-0X03FF

2.用户自定义消息  ID范围 0X0400-0X7FFF

3.应用程序消息       ID范围 0X8000-0XBFFF

4.系统注册消息     ID范围0XC000-0XFFFF

 

消息队列

   消息队列用于存放消息的一个队列,消息在队列中先入先出,所有可以从窗口程序都具有消息队列,程序可以从队列中获取的消息

消息队列的类型

 1.系统消息队列-由系统维护的消息队列,存放系统产生的消息,例如鼠标键盘等

程序消息队列-属于每一个程序(线程)的消息队列,由应用程序维护

原创粉丝点击