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 に答える