gpt4 book ai didi

c++ - 如何更新无模式对话框

转载 作者:行者123 更新时间:2023-11-28 06:52:58 30 4
gpt4 key购买 nike

我有一个在单独线程中运行的无模式对话框。我想从我的主程序更新这个对话框。我尝试创建自定义消息 UPDATE = 0x8001(在此范围内 WM_APP - 0xBFFF)和该消息的关联处理程序并调用 postthreadmessage()。但这是行不通的。我的代码如下所示。

int _tmain(int argc, _TCHAR* argv[])
{
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), SW_SHOW))
{
std::cout<<"Fatal Error: MFC initialization failed\n";
}
else
{
std::thread th2(ModelessThreadFunc);
DWORD thid = GetThreadId(th2.native_handle());
std::cout<<PostThreadMessage(thid,UPDATE,0,0);
th2.join();
}
return 0;
}

int ModelessThreadFunc()
{
dialog *dial = new dialog;
assert(dial->Create(dialog::IDD));
dial->ShowWindow(SW_SHOWNORMAL);
MSG msg;
while((::GetMessage(&msg, NULL, 0,0) != 0))
{
::peekmessage(&msg,NULL,0x8000,0x8002,0x0001);
::TranslateMessage(&msg);
::DispatchMessage(&msg);

}

return 0;
}

任何人都可以解释上述逻辑的问题吗?我的目标是在其线程之外更新对话框。欢迎任何更多的想法。谢谢。

最佳答案

如果目标线程创建任何窗口,PostThreadMessage 被记录为失败。您应该将 PostMessage 发送到对话框 HWND。您可能还需要使用 AfxBeginThread 而不是 std::thread,因为您需要 CWinThread 中内置的 MFC 消息泵。

一般来说,不推荐您采用的方法。所有的GUI都应该在主线程,副线程用于耗时操作。这避免了许多尴尬的问题。

关于c++ - 如何更新无模式对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23562984/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com