CFileDialog フォルダ作成を無効にするには?


meg  2007-05-01 19:10:09  No: 65016

CFileDialogの「フォルダの新規作成」ボタンを
無効か非表示にしたいのですが、可能でしょうか。
ご存知の方、教えて下さい。


シャノン  2007-05-02 04:59:41  No: 65017

「限りなく不可能に近い可能(何だそりゃw)」です。
要するに、頑張ればできるけど、面倒くさいし、可搬性がないし、労力に見合いません。

ちなみに、どうしてそんなことをしたいんでしょうか?


meg  2007-05-02 16:50:54  No: 65018

シャノンさんありがとうございます。
既存のフォルダのみに、ファイルを保存したいのです。
(既存のフォルダ構成を変更したくない)
一からファイル保存の機能を作成する技術は無いため、
CFileDialogをカスタマイズしようと思いました。


シャノン  2007-05-02 19:06:31  No: 65019

対象のファイルシステムが NTFS なら、アクセス権で対処できないかな。
1.対象のフォルダを右クリック
2.「セキュリティ」タブの「詳細設定」ボタン
3.「子オブジェクトに適用するアクセス許可エントリを親から継承し〜」をOFF
  警告が出たら「コピー」を押す。
4.対象のユーザを選んで「編集」
5.「フォルダの作成/データの追加」をOFF
これで、そのフォルダにサブフォルダを作れなくなります。
ま、他にもいろいろやらなきゃだけど、それは運用次第。


  2007-05-02 23:21:51  No: 65020

重箱の隅ですが、別途エクスプローラー等でフォルダを作成してから、そこへ移動して保存されればそこまでです。

この手の話はよくありますが、いくらやってもどこかに抜け道があるものなんで、別の方法で対応した方が良いと思いますよ。


夏みかん  2007-05-03 03:30:15  No: 65021

フック関数を使えば出来るような気がします。
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とフック関数』


Ryo  2007-05-03 03:40:26  No: 65022

>既存のフォルダのみに、ファイルを保存したいのです。
「あとで読み出す場合にどこにあるかわかりやすいよう、
  ¥SAVEと名づけたフォルダなど、固定の相対パス先に保存したい」
ということ?それとも
「すでにOS内に作成されている既存のフォルダならどこでもいいが、
 とにかく新たに作成されたくない」
ということ?

前者なら、ユーザーにファイル名だけを入力してもらう「テキスト入力のダイアログ」を作成すればすむと思います。
(¥マークとか、ファイル名に使えない文字を使われた場合の対応は必要だが)

>一からファイル保存の機能を作成する技術は無いため、
>CFileDialogをカスタマイズしようと思いました。
CFileDialogってファイル保存機能あったっけ?

そういや右クリックからも新規作成できちゃうね


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加