简单的鼠标操作<一个填充格子的小游戏>
1 #include "graphics.h" 2 #include "conio.h" 3 4 5 void main(){ 6 // 初始化界面 7 initgraph(640, 480); 8 9 for (int x = 0; x < 451; x += 50){ // 画 10 * 4 个50 * 50 的空白格子 10 for (int y = 0; y < 151; y += 50){ 11 rectangle(x, y, x + 50, y + 50); 12 } 13 } 14 // 画3个色板 15 setfillcolor(RED); 16 fillrectangle(100, 300, 150, 350); 17 setfillcolor(BLUE); 18 fillrectangle(200, 300, 250, 350); 19 setfillcolor(GREEN); 20 fillrectangle(300, 300, 350, 350); 21 22 MOUSEMSG m; 23 while (1){ 24 m = GetMouseMsg(); // 获取鼠标信息 25 if (m.uMsg == WM_LBUTTONDOWN){ // 当鼠标左键击下 26 if (m.x > 100 && m.x < 150 && m.y > 300 && m.y < 350){ 27 setfillcolor(RED); 28 } 29 if (m.x > 200 && m.x < 250 && m.y > 300 && m.y < 350){ 30 setfillcolor(BLUE); 31 } 32 if (m.x > 300 && m.x < 350 && m.y > 300 && m.y < 350){ 33 setfillcolor(GREEN); 34 } 35 } 36 37 m = GetMouseMsg(); 38 39 M: if (m.uMsg == WM_RBUTTONDOWN){ // 获取鼠标右键的信息 40 int i, j; 41 i = (int)(m.x / 50); 42 j = (int)(m.y / 50); 43 // 当鼠标右键点击的位子不在方格内则重新获取鼠标信息 44 if (i * 50 > 450 || j * 50 > 150){ 45 goto M; 46 } 47 // 画鼠标右键点击的格子变为相应的颜色 48 fillrectangle(i * 50, j * 50, i * 50 + 50, j * 50 + 50); 49 } 50 } 51 closegraph(); 52 }
// 鼠标消息的结构
struct MOUSEMSG
{
UINT uMsg; // 当前鼠标消息
bool mkCtrl; // Ctrl 键是否按下
bool mkShift; // Shift 键是否按下
bool mkLButton; // 鼠标左键是否按下
bool mkMButton; // 鼠标中键是否按下
bool mkRButton; // 鼠标右键是否按下
int x; // 当前鼠标 x 坐标
int y; // 当前鼠标 y 坐标
int wheel; // 鼠标滚轮滚动值
};
其中,“当前鼠标消息”可能是以下值:
WM_MOUSEMOVE 鼠标移动消息
WM_MOUSEWHEEL 鼠标滚轮拨动消息
WM_LBUTTONDOWN 左键按下消息
WM_LBUTTONUP 左键弹起消息
WM_LBUTTONDBLCLK 左键双击消息
WM_MBUTTONDOWN 中键按下消息
WM_MBUTTONUP 中键弹起消息
WM_MBUTTONDBLCLK 中键双击消息
WM_RBUTTONDOWN 右键按下消息
WM_RBUTTONUP 右键弹起消息
WM_RBUTTONDBLCLK 右键双击消息
成功没有捷径,一步一个脚印!