欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-04-07 19:16:55
...

一、键盘捕获信息:

获取按键:             

  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;
}

运行结果:

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

 

 

 

相关标签: EasyX MOUSEMSG