1.基本操作
- 声明一个变量:操作鼠标的信息
MOUSE m;
- 监听鼠标消息,获取鼠标返回的信息
m = GetMouseMsg();
- 分类处理鼠标消息 对m.uMsg分类讨论
switch (m.uMsg)
{
case WM_LBUTTONDOWN: //左键点击
break;
case WM_MOUSEMOVE: //windows message_mouse move
break;
}
2.案例
鼠标点击移动图形
/* 会出现所使用的代码不安全的情况,一般是找这个函数的对应更新的函数替换
如:sprintf -> sprintf_s , getch -> _getch
或者进行宏定义,将报错的宏进行定义,
如:#define _CRT_SECURE_NO_WARNINGS */
//在该程序的项目->属性->高级中,改成使用 多字节字符集
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <graphics.h> //这个头文件需要安装Easy X
using namespace std;
int main()
{
initgraph(640, 480, NOCLOSE); //建立窗口
//初始化开始的坐标
int x = 30;
int y = 30;
setfillcolor(GREEN);
solidcircle(x, y, 30);
MOUSEMSG m;
int mx, my;
bool keydown = false; //检测按键是否按下
while (!_kbhit())
{
while (MouseHit())
{
m = GetMouseMsg();
switch (m.uMsg)
{
case WM_LBUTTONDOWN: //鼠标左键
if (sqrt((m.x - x) * (m.x - x) + (m.y - y) * (m.y - y)) < 30) //判断是否点击到了圆
{
keydown = true;
mx = m.x;
my = m.y;
}
break;
case WM_LBUTTONUP:
break;
case WM_MOUSEMOVE: //鼠标移动
if (keydown)
{
clearcircle(x, y, 30);
x += (m.x-mx); //更新x,y
y += (m.y-my);
mx = m.x; //更新mx,my
my = m.y;
solidcircle(x, y, 30);
}
break;
}
}
}
closegraph();
return 0;
}