はじめまして、さらやと申します。
VS2005 C++, MFC不使用でダイアログアプリを作成しています。(XP上で動かします。)
GetOpenFileName()で作成した「ファイルを開く」ダイアログにて、特定のフォルダを開いた場合、メッセージを出してあらかじめ指定したフォルダに強制的に移動するようにしたいと思っています。
(例:DドライブのABCというフォルダを選択(「ファイルの場所」コンボボックスから選択 or ファイル一覧のリストビューから選択)すると、ABCフォルダ配下のファイルは一切見せず、勝手に「マイドキュメント」を選択した状態になる。ファイル一覧のリストビューにはマイドキュメント配下のファイルが表示される。)
リストビューやコンボボックスをサブクラス化したりして特定のフォルダを開いた場合にメッセージが出るところまでは実装できたのですが、指定したフォルダに移ることができずにいます。
「ファイルの場所」コンボボックスで指定したフォルダ名を「選択した状態にする」こともできましたが、チェンジイベントが発生しないのか、リストビューに指定したフォルダ配下のファイルが表示されません。
自分でも引き続きあがいてみようと思っていますが、締め切りがあさってのため、何かヒントをいただければと思い、質問させていただきました。
よろしくお願いいたします。
失礼しました。
改行がひとつも入っていませんでした。
あまりにもお粗末なので、再書き込みさせてください。
----以下、再書き込み-----
VS2005 C++, MFC不使用でダイアログアプリを作成しています。
(XP上で動かします。)
GetOpenFileName()で作成した「ファイルを開く」ダイアログにて、
特定のフォルダを開いた場合、メッセージを出してあらかじめ指定した
フォルダに強制的に移動するようにしたいと思っています。
(例:DドライブのABCというフォルダを選択(「ファイルの場所」コンボ
ボックスから選択 or ファイル一覧のリストビューから選択)すると、
ABCフォルダ配下のファイルは一切見せず、勝手に「マイドキュメント」を
選択した状態になる。
ファイル一覧のリストビューにはマイドキュメント配下のファイルが
表示される。)
リストビューやコンボボックスをサブクラス化したりして
特定のフォルダを開いた場合にメッセージが出るところまでは
実装できたのですが、指定したフォルダに移ることができずにいます。
「ファイルの場所」コンボボックスで、指定したフォルダ名を
「選択した状態にする」こともできましたが、チェンジイベントが
発生しないのか、リストビューに指定したフォルダ配下のファイルが
表示されません。
自分でも引き続きあがいてみようと思っていますが、締め切りが
あさってのため、何かヒントをいただければと思い、
質問させていただきました。
よろしくお願いいたします
#include <dlgs.h>
void SelectDirectory(HWND fileDialog, LPCTSTR folderPath)
{
if (!::SetDlgItemText(fileDialog, edt1, folderPath)) {
::SetDlgItemText(fileDialog, cmb13, folderPath);
}
::SendMessage(fileDialog, WM_COMMAND, IDOK, 0);
}
void SelectDirectory(HWND fileDialog, LPITEMIDLIST folderPath)
{
IShellBrowser* shellBrowser =
(IShellBrowser*)::SendMessage(fileDialog, WM_USER + 7, 0, 0);
if (shellBrowser) {
shellBrowser->BrowseObject(folderPath, SBSP_SAMEBROWSER | SBSP_ABSOLUTE);
}
}
たしかこうだったような。
forty-five さん
とても丁寧なコメント、ありがとうございました。
なるほど!!非常に単純明快で、目からうろこです。
フォルダを選択してOKを押せば、そのパスに移るのはあたりまえなのに、
まったく思いつきませんでした。
(長々と悩んでいたのが馬鹿らしいくらい・・・)
あっという間にちゃんと指定のフォルダに移動することができました。
本当にありがとうございました。
問題が解決したら解決チェックを付けてくださいな。
すみません。
チェックつけて回答したつもりだったのですが、
ついていなかったのでしょうか。。。
失礼しました。
ツイート | ![]() |