PostMessage 在winform应用中不能使用已分配的控制台。

问题描述 投票:1回答:1

所以我得到了一个 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();
        }
    }

每当我点击复选框时,它就会分配一个控制台 然后当我取消复选框时,它就会存储控制台的H窗口,使用的是: GetConsoleWindow 内功 allocatedConsole 然后试图关闭 allocatedConsole 远程使用 PostMessageA 功能与 WM_CLOSE 信息,最后它释放了它。

然而,当我取消选中复选框时,它释放了控制台,但根本没有关闭它。.

先谢谢你了。

c++ windows c++-cli
1个回答
3
投票

尝试发送一个 WM_SYSCOMMAND 捎带 wParam = SC_CLOSE. 这更接近于从系统菜单中选择 "关闭"。

© www.soinside.com 2019 - 2024. All rights reserved.