C中从键盘获取字符&从鼠标捕获信息

一、键盘捕获信息:

获取按键:             

  char c;                   
  if (_kbhit())               
      c = _getch()            

二、鼠标捕获信息:

获取

MOUSEMSG m;
if (MouseHit())
   m = GetMouseMsg();

鼠标信息的结构体:

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 右键双击消息

例如,判断获取的消息是否是鼠标左键按下,可以用:

if (m.uMsg == WM_LBUTTONDOWN)
	...

示例代码:

程序运行释义:该程序会用红色的点标出鼠标移动的轨迹,按左键画一个小方块,按Ctrl+左键画一个大方块,按右键退出:

#include <graphics.h>
#include <conio.h>

int main()
{
	// 初始化图形窗口
	initgraph(640, 480);
	MOUSEMSG m;						// 定义鼠标消息
	while (true)
	{
		// 获取一条鼠标消息
		m = GetMouseMsg();

		switch (m.uMsg)
		{
		case WM_MOUSEMOVE:		// 鼠标移动的时候画红色的小点
			putpixel(m.x, m.y, RED);
			break;

		case WM_LBUTTONDOWN:	// 如果点左键的同时按下了 Ctrl 键
			if (m.mkCtrl)		// 画一个大方块
				rectangle(m.x - 10, m.y - 10, m.x + 10, m.y + 10);
			else				// 画一个小方块
				rectangle(m.x - 5, m.y - 5, m.x + 5, m.y + 5);
			break;

		case WM_RBUTTONUP:
			return 0;				// 按鼠标右键退出程序
		}
	}
	// 关闭图形窗口
	closegraph();
	return 0;
}

运行结果:

发布了76 篇原创文章 · 获赞 32 · 访问量 7933

猜你喜欢

转载自blog.csdn.net/wuwuku123/article/details/103730767