1.消息处理---鼠标消息:
1.ExMessage结构体:
ExMessage---这个结构体用于保存鼠标消息。
//定义消息结构体变量
ExMessage msg = { 0 };
2.获取消息:
(1)peekmessage函数:用于获取一个消息,并立即返回。
bool peekmessage(ExMessage *msg, BYTE filter = -1, bool removemsg = true);
参数:
msg:指向消息结构体 ExMessage 的指针,用来保存获取到的消息。
filter:默认 -1 获取所有类别的消息。可以用以下值或值的组合获取指定类别的消息:
removemsg:在 peekmessage 处理完消息后,是否将其从消息队列中移除。
返回值:
如果获取到了消息,返回 true,如果当前没有消息,返回 false。
(2)获取鼠标按键情况:
peekmessage函数会将消息保存到 ExMessage 结构体中,只需查看 msg.message (一个成员变量)的内容即可知道按了什么键。
msg.message 可以成为以下值:
//获取消息
while (1)
{
if (peekmessage(&msg, EX_MOUSE))
{
switch (msg.message)
{
case WM_LBUTTONDOWN :
cout << "鼠标左键按下\n" << endl;
break;
case WM_RBUTTONDOWN :
cout << "鼠标右键按下\n" << endl;
break;
case WM_MBUTTONDOWN :
cout << "鼠标中键按下\n" << endl;
break;
case WM_MOUSEWHEEL: :
cout << "鼠标滚轮滚动\n" << endl;
break;
case WM_LBUTTONDBLCLK :
cout << "鼠标左键双击" << endl;
break;
}
}
}
注:检测鼠标双击必须在 initgraph 函数参数中传入 EX_DBLCLKS(详见上篇)。
(3)获取按键时鼠标位置:
msg.x ; msg.y 中保存了按键时鼠标的位置坐标。
例:将上面代码改为:
case WM_LBUTTONDOWN :
cout << "鼠标左键按下 pos("<<msg.x<<","<<msg.y<<")" << endl;
(4)获取滚轮时滚动方向:
msg.wheel 中保存了滚轮时滚动方向:
向屏幕滚动为120 ,向自己为 -120。