1

我在 VC++ 类中创建了线程。使用常规方式,即如何将 CreateThread 用于类成员函数?

现在我在这个线程中向用户显示警报消息框。使用对话框(不使用 AfxMessageBox)

对话框样式为 POPUP。但它在任务栏上显示此警报的另一个新选项卡以及我的主对话框选项卡

如何从任务栏中的显示中删除此选项卡(警报选项卡)。

4

1 回答 1

-1

好吧,在另一个线程中显示一个窗口是一个很大的禁忌!始终在您的 UI 线程中显示 UI。如果你的工作线程需要显示一些 UI,它需要通知 UI 线程(以安全的方式)让它显示对话框。

删除WS_EX_APPWINDOW样式不是这里的解决方案。如果你做得不对,你很可能会以奇怪的死锁告终。

让您的线程将消息发布到您的 UI 窗口,然后在那里处理它!

#define UWM_SHOW_UI (WM_APP + 1)
//    
// In your thread procedure:
PostMessage(pThreadData->m_hWnd, UWM_SHOW_UI);
WaitForMultipleObjects(...); // Wait for both exit event (set in `OnDestroy`) and continue event.
// Handle signal... Exit or continue?
//
// In your main window message handler:
void CMyWindow::OnShowUI(WPARAM wParam, LPARAM lParam)
{
    CMyDlg dlg(this);
    dlg.DoModal();
    //
    SetEvent(m_hEventContinue); // Continue thread!
}
于 2012-09-26T10:46:36.993 回答