我最近在写easyx时发现总是弹出两个窗口
(windows 11系统)
为什么我用VS2022写easyx的时候总是弹出控制台(dos),使用**_getch**()时必须要点一下控制台才能正常输入。各位有没有什么解决办法可以使保持新窗口(非控制台) 置顶 的同时也能进行输入,谢谢。
我自己已经解决了:
原因:我读取键盘状态时用的getch()/_getch(),而它的原理是无需回车的cin/scanf(),它并不是专门读取键盘信息的函数
解决方法:将**getch()/_getch()改为GetAsyncKeyState()**函数,这个函数可以读取键盘状态,且满足我的需求
感谢各位回答我的问题
#include<conio.h>
#include<stdio.h>
#include<easyx.h>
//#include<graphics.h>//包含图像库头文件,仅仅适用于C++
int main()
{
//创建一个窗口,initgraph();
initgraph(400, 480, EW_SHOWCONSOLE);
int x=50;
int y=50;
while (true)
{
cleardevice();//清除上一次绘画的图形防止发生重叠
solidcircle(x, y, 50);//无边框填充画圆
char input;
input=_getch();
switch (input)
{
//case 119:
case 'w':
case 'W':
y -= 3;
printf("向上移动\n");
break;
//case 115:
case 's':
case 'S':
y += 3;
printf("向下移动\n");
break;
//case 97:
case 'a':
case 'A':
x -= 3;
printf("向左移动\n");
break;
//case 100:
case 'd':
case 'D':
x += 3;
printf("向右移动\n");
break;
}
}
getchar();
//关闭窗口,closegraph();
closegraph();
return 0;
}
这里由于不能发本地视频,所以大家可以拷贝代码在vs上试一试,查看效果😂😂😂😂😂
如果你尝试之后就可以发现,这种方式只能让图形直线移动,并不能像游戏角色可以斜着移动,那我们紧接着学习下一个函数
取消命令行窗口,代码前加 #pragma comment(linker, "/subsystem:windows /entry:mainCRTStartup")
输入用
ExMessage m; // 定义消息变量
while(true)
{
// 获取一条鼠标或按键消息
m = getmessage(EX_MOUSE | EX_KEY);
switch(m.message)
{
case WM_MOUSEMOVE:
// 鼠标移动
break;
case WM_LBUTTONDOWN:
// 如果点左键
break;
case WM_KEYDOWN:
// 按键
if (m.vkcode == VK_ESCAPE)
return 0; // 按 ESC 键退出程序
}
}