CFileDialogの「フォルダの新規作成」ボタンを
無効か非表示にしたいのですが、可能でしょうか。
ご存知の方、教えて下さい。
「限りなく不可能に近い可能(何だそりゃw)」です。
要するに、頑張ればできるけど、面倒くさいし、可搬性がないし、労力に見合いません。
ちなみに、どうしてそんなことをしたいんでしょうか?
シャノンさんありがとうございます。
既存のフォルダのみに、ファイルを保存したいのです。
(既存のフォルダ構成を変更したくない)
一からファイル保存の機能を作成する技術は無いため、
CFileDialogをカスタマイズしようと思いました。
対象のファイルシステムが NTFS なら、アクセス権で対処できないかな。
1.対象のフォルダを右クリック
2.「セキュリティ」タブの「詳細設定」ボタン
3.「子オブジェクトに適用するアクセス許可エントリを親から継承し〜」をOFF
警告が出たら「コピー」を押す。
4.対象のユーザを選んで「編集」
5.「フォルダの作成/データの追加」をOFF
これで、そのフォルダにサブフォルダを作れなくなります。
ま、他にもいろいろやらなきゃだけど、それは運用次第。
重箱の隅ですが、別途エクスプローラー等でフォルダを作成してから、そこへ移動して保存されればそこまでです。
この手の話はよくありますが、いくらやってもどこかに抜け道があるものなんで、別の方法で対応した方が良いと思いますよ。
フック関数を使えば出来るような気がします。
OPENFILENAME 構造体の lpfnHook メンバにフック関数のポインタをセット。
フック関数は、アプリケーション定義のコールバック関数ですので自作する。
UINT CALLBACK 関数名( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
switch ( uMsg ){
case WM_INITDIALOG:
/*
ここで最初の ToolbarWindow32 クラスのボタンを非表示や無効化すればよい。
タイトル文字列なしと ToolbarWindow32 クラスで検索すればウインドウハンドルが
取得できると思います。あとは左から3つ目のボタンを表示や無効化すればよい。
*/
return TRUE; ←処理したら TRUE を返すこと
default:return FALSE;
}
return FALSE;
}
その他:
OPENFILENAME 構造体の Flags メンバに OFN_ENABLEHOOK 定数を追加します。
OPENFILENAME 構造体の lpfnHook メンバに上記の『関数名』をセットします。
http://wisdom.sakura.ne.jp/system/winapi/common/common2.html→『フック関数』
http://wisdom.sakura.ne.jp/system/winapi/common/common6.html→『ファイル選択』
http://www.kumei.ne.jp/c_lang/sdk/sdk_40.htm→『第40章 ChooseFontとフック関数』
>既存のフォルダのみに、ファイルを保存したいのです。
「あとで読み出す場合にどこにあるかわかりやすいよう、
¥SAVEと名づけたフォルダなど、固定の相対パス先に保存したい」
ということ?それとも
「すでにOS内に作成されている既存のフォルダならどこでもいいが、
とにかく新たに作成されたくない」
ということ?
前者なら、ユーザーにファイル名だけを入力してもらう「テキスト入力のダイアログ」を作成すればすむと思います。
(¥マークとか、ファイル名に使えない文字を使われた場合の対応は必要だが)
>一からファイル保存の機能を作成する技術は無いため、
>CFileDialogをカスタマイズしようと思いました。
CFileDialogってファイル保存機能あったっけ?
そういや右クリックからも新規作成できちゃうね
ツイート | ![]() |