CBrowseFolderDialogのDoModalに関して

[戻る]
haru 2004/11/26(金) 19:09:55
Area of VC++ Tipsより
フォルダ選択ダイアログクラス(CBrowseFolderDialog)
をダウンロードして使わせて頂いております。
(http://rararahp.cool.ne.jp/vc/class/browseFolderDialog.htm)
質問ですが以下のような使い方を下のですが、モーダルではなくモードレスにて動作します。
----------------------------------
CBrowseFolderDialog dlg;
dlg.DoModal(lpszSamplePath);   // lpszはサンプルのパスです
----------------------------------
呼び出し元のダイアログが閉じられても残ってしまうという問題があるため
対処したいと思います。
対応された方いらっしゃいましたらご教授よろしくお願い致します。
CBrowseFolderDialog::Modal()
のBROWSEINFO bi;にて指定可能ではないかと予想しているのですが(というかそれ以外に
さわる場所が見あたらないのですが)、なかなか上手く行きません。
よろしくお願い致します。

nyaine 2004/11/27(土) 16:16:42
> 呼び出し元のダイアログが閉じられても残ってしまうという問題があるため
> 対処したいと思います。

CBrowseFolderDialogをメンバ変数に宣言して、親ウィンドウが閉じられた時のイベントに
EndDialogもしくはSendMessageで終了のメッセージを飛ばすだけで出来たと思います。

haru 2004/11/29(月) 11:33:13
[[解決]]
nyaine さん
ご回答ありがとうございます。確かにモーダルダイアログを実現しなくても、モードレス
としてダイアログを削除すればいいだけの問題ですね。(失念しておりました)
ありがとうございました。

haru 2004/11/29(月) 18:29:47
追記>>

呼び出し元のm_hWndをCBrowseFolderDialogのメンバ変数に設定するAPIを追加して
CBrowseFolderDialog::Modal()のbi.hwndOwnerを設定する処理を以下の通り変更すること
で対応致しました。

if ( m_Owner == NULL )
    bi.hwndOwner = AfxGetMainWnd()->GetSafeHwnd();//hWnd;
else 
    bi.hwndOwner = m_Owner;

以上です。

古いスレッドには追加発言できません。