显示控制台,从控制台启动可执行程序,鼠标点击窗口的关闭按钮后,能否保持控制台呢?

0

想要在显示 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;
}

补充一下:想在控制台启动程序的原因是,习惯了命令行方式编译和运行程序,希望控制台窗口持续打开状态,每次修改代码后按方向键快速执行编译和运行。

ava
ChrisZZ

2023-1-21

0

如果创建的是控制台项目,那么,绘图窗口与控制台是关联的,点 X 关掉绘图窗口,就等于关掉控制台窗口。

如果希望绘图窗口与控制台无关,可以创建 Win32 Application 项目,请参考:https://codebus.cn/yangw/use-easyx-in-win32-application

Win32 Application 项目与控制台彻底无关,关掉后不影响原控制台。

ava
慢羊羊

2023-1-23

技术讨论社区