1

トレイアイコン付きのアプリケーションがあります。トレイアイコンメッセージを処理するために使用される非表示のメインウィンドウ(CMainFrm)があります。トレイアイコンには、設定、ヘルプ、終了コマンドのコンテキストメニューがあります。

ユーザーが[設定]を選択すると、モードレス設定ダイアログが表示されます(親:GetDesktopWindow())。[設定]ダイアログには、MyBrowseFolderDialogをモーダルとして表示する参照ボタンがあります。そのため、このダイアログが表示され、ユーザーがトレイメニューの[終了]コマンドを使用してアプリケーションを閉じようとすると問題が発生します。

これらすべてのダイアログでアプリケーションを正常に閉じる方法を知っている人はいますか?トレイメニュー=>設定ダイアログ(モードレス)=>ブラウズダイアログ(モーダル)

4

2 に答える 2

1

CDialog * m_pModaldDlgメンバーを[設定]ダイアログクラスに追加し、コンストラクターでNULLに初期化します。MyBrowseFolderDialogが表示されたら、次のダイアログポインタに設定します。

MyBrowseFolderDialog dlg();
m_pModaldDlg =&dlg;
dlg.DoModal();
m_pModaldDlg = NULL;

終了メッセージハンドラーの場合:

if(m_pModaldDlg)
    m_pModaldDlg-> EndDialog(0);
//設定ダイアログを閉じる
于 2011-02-21T11:15:14.550 に答える
0

Alexの答えはまだ良いです-設定と終了ハンドラーの両方が必要に応じてそれに到達できるように、CMainFrmにm_pModalDlgを保存する必要があります。

他のいくつかの可能な解決策:

  1. フォルダ参照がアクティブな場合、設定ハンドラは終了オプションを無効にします

  2. カスタムメッセージを登録します-Exitハンドラーにこのメッセージをブラウズフォルダーに送信させます(ただし、何らかのウィンドウハンドルが必要になります)

私はアレックスの答えが一番好きです-ポインタをCMainFrmのどこかに保存するだけです

于 2011-03-14T19:14:48.600 に答える