トップ回答者
CFileDialogのOnOK,OnCancel関数

質問
回答
-
GetIFileOpenDialog() で、IFileOpenDialog という IFileDialog の派生インターフェースを取得するメソッドがあります。
こちらを使えば、わざわざ QueryInterface することなく Close() を呼び出せます。
それと、OnCancel/OnOK については、確かにリファレンスにはXPではだめだがVista以降はOKとあります。
が、戦後の文章をちゃんと読めばわかりますが、該当箇所は従来のカスタマイズに言及している個所です。
メモの囲いにあるように Vista 以降はIDを振りなおしているというところにもあるように、OK/Cancel のボタンのIDが、IDOK/IDCANCEL になったのだと思います(古いファイルダイアログの各IDを調べていないので詳細はわかりません)。
とっちゃん@わんくま同盟, Visual Studio and Development Technologies http://blogs.wankuma.com/tocchann/default.aspx
- 回答としてマーク Brillia 2017年10月18日 8:22
-
ご返事ありがとうございます。
■ボタンの追加、追加したボタンでファイルダイアログを閉じる処理のまとめ
・TRUE:VISTA以降(IFileDialogCustomize::AddPushButtonでボタン追加)
void CMyFileDialog::OnButtonClicked(DWORD dwIDCtl){ IFileDialog* pfdc = GetIFileOpenDialog(); pfdc->Close(S_OK); pfdc->Release(); }
・FALSE:XP(テンプレートを使用してボタンを追加)※下記のやり方は保証されていないとか。。。
void CMyFileOpenDlg::OnBnClickedButton1() { //CDialog へのハンドルを取得する CDialog* pDialog =(CDialog *)GetParent(); if(pDialog != NULL){ pDialog->EndDialog(IDCANCEL); } }
- 回答としてマーク Brillia 2017年10月18日 8:22
すべての返信
-
ご返事ありがとうございます。
下記のプログラムでダイアログを閉じることができました。
ただ、MFCのCFileDialogの、OnButtonClickedなど、インターフェイスの使用を隠して実装してくれているので、
CFileDialogのメンバ関数などで可能なのかと思っていました。IFileDialogCustomize* pfdc = GetIFileDialogCustomize(); IFileDialog *pfd; if (SUCCEEDED(pfdc->QueryInterface(&pfd))) { pfd->Close(S_OK); pfd->Release(); } pfdc->Release();
また、リファレンスには、VISTA以降なら、OnOK、OnCancelが使用できることを記述していたのに、
また、XPスタイルの時の、プログラムからのCloseは可能なんでしょうか?
これはまちがいなのだろうか。- 編集済み Brillia 2017年10月18日 7:31 追加質問
-
GetIFileOpenDialog() で、IFileOpenDialog という IFileDialog の派生インターフェースを取得するメソッドがあります。
こちらを使えば、わざわざ QueryInterface することなく Close() を呼び出せます。
それと、OnCancel/OnOK については、確かにリファレンスにはXPではだめだがVista以降はOKとあります。
が、戦後の文章をちゃんと読めばわかりますが、該当箇所は従来のカスタマイズに言及している個所です。
メモの囲いにあるように Vista 以降はIDを振りなおしているというところにもあるように、OK/Cancel のボタンのIDが、IDOK/IDCANCEL になったのだと思います(古いファイルダイアログの各IDを調べていないので詳細はわかりません)。
とっちゃん@わんくま同盟, Visual Studio and Development Technologies http://blogs.wankuma.com/tocchann/default.aspx
- 回答としてマーク Brillia 2017年10月18日 8:22
-
ご返事ありがとうございます。
■ボタンの追加、追加したボタンでファイルダイアログを閉じる処理のまとめ
・TRUE:VISTA以降(IFileDialogCustomize::AddPushButtonでボタン追加)
void CMyFileDialog::OnButtonClicked(DWORD dwIDCtl){ IFileDialog* pfdc = GetIFileOpenDialog(); pfdc->Close(S_OK); pfdc->Release(); }
・FALSE:XP(テンプレートを使用してボタンを追加)※下記のやり方は保証されていないとか。。。
void CMyFileOpenDlg::OnBnClickedButton1() { //CDialog へのハンドルを取得する CDialog* pDialog =(CDialog *)GetParent(); if(pDialog != NULL){ pDialog->EndDialog(IDCANCEL); } }
- 回答としてマーク Brillia 2017年10月18日 8:22