笔记:
窗口类附加数据缓冲区的用法
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.系统消息队列-由系统维护的消息队列,存放系统产生的消息,例如鼠标键盘等
程序消息队列-属于每一个程序(线程)的消息队列,由应用程序维护