想要在显示 easyx 窗口的同时, 显示控制台。这可以通过 initgraph 时传入 EX_SHOWCONSOLE 参数做到。
在这个前提下,在 cmd 控制台中启动 test.exe 程序(调用了easyx生成的可执行程序), 当鼠标左键点击了 easyx 窗口的关闭按钮("X") 后,发现控制台本身也被关闭了。预期行为是仅关闭 easyx 窗口,不关闭控制台。能否做到呢?
尝试了 peekmessage 时判断 WM_QUIT 和 QM_DESTROY , 但似乎都不起作用。代码中封装为了 WindowShouldClose() 函数。
开发环境:Windows 10, VS2022, EasyX 最新版, 64位程序。
代码如下:
#include <graphics.h>
#include <conio.h> // _kbhit()
#include <stdio.h>
#include <stdlib.h>
void startup()
{
initgraph(WIDTH * BLOCK_SIZE, HEIGHT * BLOCK_SIZE, EX_SHOWCONSOLE);
BeginBatchDraw();
}
void show()
{
cleardevice();
FlushBatchDraw();
}
bool WindowShouldClose()
{
bool window_should_close = false;
ExMessage m;
//getmessage(&m, EX_MOUSE | EX_KEY);
peekmessage(&m);
if (m.message != 512)
{
printf("m.message = %d\n", m.message);
}
switch (m.message)
{
case WM_KEYDOWN:
switch (m.vkcode)
{
case VK_ESCAPE:
window_should_close = true;
break;
}
break;
case WM_CLOSE:
//window_should_close = true;
break;
case WM_DESTROY:
//window_should_close = true;
break;
}
return window_should_close;
}
int main()
{
startup();
while (!WindowShouldClose())
{
show();
}
closegraph();
return 0;
}
补充一下:想在控制台启动程序的原因是,习惯了命令行方式编译和运行程序,希望控制台窗口持续打开状态,每次修改代码后按方向键快速执行编译和运行。