所以我得到了一个c++/cli形式的应用程序,该应用程序具有一个复选框(中文调试),其应用程序内部带有checkBox3的名称:

这是复选框的代码:

private: System::Void checkBox3_CheckedChanged(System::Object^ sender, System::EventArgs^ e) {
        //set the debug flag
        g.debug = !g.debug;
        HWND allocatedConsole = NULL;
        if (this->checkBox3->Checked == true)
        {
            AllocConsole();
            freopen("CONOUT$", "w", stdout);//use cout
        }
        else {
            allocatedConsole = GetConsoleWindow();
            std::cout << allocatedConsole << std::endl;
            PostMessageA(allocatedConsole, WM_CLOSE, 0, 0);
            FreeConsole();
        }
    }

每当我单击该复选框时,它都会分配一个控制台,然后当我取消选中该复选框时,它将使用GetConsoleWindow函数将控制台的H窗口存储在allocatedConsole中,然后尝试使用allocatedConsole函数远程关闭PostMessageAWM_CLOSE消息,最后释放它。

但是,当我取消选中该复选框时,它释放了控制台,但并没有完全关闭它

提前致谢。

最佳答案

尝试发送WM_SYSCOMMAND = wParamSC_CLOSE消息。这更类似于从系统菜单中选择“关闭”。

07-24 20:03