EASYX中的消息处理

eg1:点击鼠标的左键右键绘制不同的图形

#define _CRT_SECURE_NO_WARNINGS
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define PI 3.14
/*
  计算时长的步骤
  1:获取一次计数器当前的数值,记为startCount
  2:处理事务
  3:再次获取计算器当前数值,记为endCount
  4:用(endCouny - startCount)/F ,计算所耗时长,单位为秒,将秒转换为微秒的话可以乘以1000000
*/

int main() {
	initgraph(800, 600);
	setbkcolor(WHITE);
	cleardevice();
	// 创建了一个message类型的指针
	ExMessage msg;
	while (1){
		// 把获取到的鼠标消息传入message指针中
		msg = getmessage(EX_MOUSE); //仅获取鼠标消息
		// 使用点的方式进行调用
		switch (msg.message) {
			// 表示鼠标移动,如果与该项匹配就在这个位置绘制一个半径为2的黑色圆形
		   case WM_MOUSEMOVE:
			   setfillcolor(BLACK);
			   // 当前位置的x,y坐标保存在鼠标当前位置的结构体中
			   solidcircle(msg.x, msg.y, 10);
			   break;
			   // 点击鼠标左键,如果匹配在当前位置绘制红色的半径为10的圆
		   case WM_LBUTTONDOWN:
			   setfillcolor(BLUE);
			   solidcircle(msg.x, msg.y, 10);
			   break;
			   // 点击鼠标右键,如果匹配在当前位置绘制蓝色的半径为10的圆
		   case WM_RBUTTONDOWN:
			   setfillcolor(BLUE);
			   solidcircle(msg.x, msg.y, 10);
			   break;

		}
	}
	return 0;

}
     

EASYX中的消息处理_第1张图片eg2:通过点击ctrl+鼠标左键或者是鼠标右键的方式绘制图形但是当前的一系列行为都视为鼠标的单击时间

#define _CRT_SECURE_NO_WARNINGS
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define PI 3.14
/*
  计算时长的步骤
  1:获取一次计数器当前的数值,记为startCount
  2:处理事务
  3:再次获取计算器当前数值,记为endCount
  4:用(endCouny - startCount)/F ,计算所耗时长,单位为秒,将秒转换为微秒的话可以乘以1000000
*/

int main() {
	initgraph(800, 600);
	setbkcolor(WHITE);
	cleardevice();
	// 创建了一个message类型的指针
	ExMessage msg;
	while (1){
		// 把获取到的鼠标消息传入message指针中
		msg = getmessage(EX_MOUSE); //仅获取鼠标消息
		// 使用点的方式进行调用
		switch (msg.message) {
			// 表示鼠标移动,如果与该项匹配就在这个位置绘制一个半径为2的黑色圆形
		   case WM_MOUSEMOVE:
			   setfillcolor(BLACK);
			   // 当前位置的x,y坐标保存在鼠标当前位置的结构体中
			   solidcircle(msg.x, msg.y, 2);
			   break;
			   // 点击鼠标左键,如果匹配在当前位置绘制红色的半径为10的圆
		   case WM_LBUTTONDOWN:
			   setfillcolor(RED);
			   // 判断是否按下ctrl键如果是就绘制红字正方形
			   if (msg.ctrl == true) {
				   solidrectangle(msg.x-10, msg.y-10, msg.x+10, msg.y+10);
			   }
			   // 如果不是就绘制红色圆形
			   else {
				   solidcircle(msg.x, msg.y, 10);
			   }
			   break;

			   // 点击鼠标右键,如果匹配在当前位置绘制蓝色的半径为10的圆
		   case WM_RBUTTONDOWN:
			   setfillcolor(BLUE);
			   if (msg.ctrl == true) {
				   solidrectangle(msg.x - 10, msg.y - 10, msg.x + 10, msg.y + 10);
			   }
			   else {
				   solidcircle(msg.x, msg.y, 10);
			   } 
			   break;
	
		}
	}
	return 0;

}
     

EASYX中的消息处理_第2张图片eg3:代码改进鼠标双击事件

EASYX中的消息处理_第3张图片eg4:EASYX实现键盘消息控制

EASYX中的消息处理_第4张图片按下键盘中的对应键后显示该键的vkcode
EASYX中的消息处理_第5张图片
具体修改后的代码如下所示,做了一些微小的修改

#define _CRT_SECURE_NO_WARNINGS
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define PI 3.14
/*
  计算时长的步骤
  1:获取一次计数器当前的数值,记为startCount
  2:处理事务
  3:再次获取计算器当前数值,记为endCount
  4:用(endCouny - startCount)/F ,计算所耗时长,单位为秒,将秒转换为微秒的话可以乘以1000000
*/

int main() {
	initgraph(800, 600,EX_SHOWCONSOLE);// 创建绘图窗体的同时打开控制台
	setbkcolor(WHITE);
	cleardevice();
	// 创建了一个message类型的指针
	ExMessage msg;
	while (1){
		// 把获取到的鼠标消息传入message指针中
		msg = getmessage(EX_KEY); //仅获取鼠标消息
		// 使用点的方式进行调用
		switch (msg.message) {
			// 表示当按下键盘的一个键位后显示对应按键的vkcode
		   case WM_KEYDOWN:
			   printf("%#x\n", msg.vkcode);
			   break;
			   // 点击鼠标左键,如果匹配在当前位置绘制红色的半径为10的圆
		   case WM_LBUTTONDOWN:
			   setfillcolor(RED);
			   // 判断是否按下ctrl键如果是就绘制红字正方形
			   if (msg.ctrl == true) {
				   solidrectangle(msg.x-10, msg.y-10, msg.x+10, msg.y+10);
			   }
			   // 如果不是就绘制红色圆形
			   else {
				   solidcircle(msg.x, msg.y, 10);
			   }
			   break;

			   // 点击鼠标右键,如果匹配在当前位置绘制蓝色的半径为10的圆
		   case WM_RBUTTONDOWN:
			   setfillcolor(BLUE);
			   if (msg.ctrl == true) {
				   solidrectangle(msg.x - 10, msg.y - 10, msg.x + 10, msg.y + 10);
			   }
			   else {
				   solidcircle(msg.x, msg.y, 10);
			   } 
			   break;
	
		}
	}
	return 0;

}
     

以下是vkcode的对应按键显示的运行结果
EASYX中的消息处理_第6张图片

你可能感兴趣的:(c语言,EASTX,开发语言,EASYX,visual,code)