最开始为windows消息迷惑的时候是一个叫做sendMessage的函数:
LRESULT SendMessage(
HWND hWnd,
UINT Msg,
WPARAM wParam,
LPARAM lParam
);
最后的两个参数在不同的情况下到底应该怎么来赋值呢?后来又遇到了窗口过程函数:
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam),后面的两个参数在不同的消息下分别代表什么意思呢?
曾经四处搜索过,但是没有满意的答复,这两天在看《windows程序设计》,把关于鼠标这部分内容记录下来,作个笔记。
鼠标消息:
鼠标消息有21种,可以分为三类:
1.命中测试消息WM_NCHITTEST(我的理解:以WM开头的严格来说是消息名称,完整的消息应该是个结构体MSG msg,该消息名称为msg.wParam,但是一般消息和消息名称似乎分的不是很仔细)。
它是优先于任何接下来要说到的客户区和非客户区的鼠标消息。因为其余20种鼠标消息都是基于它的基础之上产生的。也就是说user用鼠标点击之后首先产生的是WM_NCHITTEST消息,然后经窗口函数的DefWindowProc返回一个值,这个值将成为新的鼠标消息的wParam值。
注意:不要被这里的字面字母所迷惑,WM_NCHITTEST虽然有NC作为前缀,但是它不仅是产生非客户区鼠标消息的基础同时也是客户区消息的产生基础。
经由WM_NCHITTEST消息产生的值可以是任意非客户区鼠标消息的wParam值再加上以下四种中的一种:
HTCLIENT 客户区
HTNOWHERE 不在窗口中
HTTRANSPARENT 窗口被另外一个窗口覆盖
HTERROR 使得DefWindowProc产生蜂鸣声
举个例子:如果DefWindowProc返回的是HTCLIENT ,那么windows将把屏幕坐标转换为客户区坐标并产生客户区鼠标消息。
lParam包含的是鼠标位置的屏幕