none
Vista での OPENFILENAME [読み取り専用として開く]チェックボックスについて RRS feed

  • 質問

  • OPENFILENAME 構造体を  GetOpenFileName 関数に渡してファイルを開くダイアログを表示させています。

    [読み取り専用として開く]チェックボックスは表示させたいので、OFN_HIDEREADONLY などは指定していません。
    ところが、XPではチェックボックスは表示されますが Vista(Business SP1)ですと表示されません。

    何か特別な処理が必要なのでしょうか。
    OPENFILENAME ではなく、MFC の CFileDialog の第8引数を FALSE として使用すればチェックボックスは表示される(Vistaスタイルではなくなりますが)のは確認できているのですが、OPENFILENAME を直に使用した場合の方法を知りたいと思っています。

    参考までに、以下のようなコードを書いています。
    ofn.Flags の行をコメントアウトしても状況は変わりませんでした。

    OPENFILENAME ofn;
    char pszPath[MAX_PATH];
    pszPath[0] = NULL;
    memset( &ofn,0,sizeof( ofn ) );
      
    ofn.lStructSize    = sizeof( ofn );
    ofn.hwndOwner = ...;
    ofn.hInstance     = ...;
    ofn.lpstrFile        = pszPath;
    ofn.nMaxFile       = MAX_PATH-1;
    ofn.Flags            = OFN_OVERWRITEPROMPT | OFN_EXPLORER | OFN_FILEMUSTEXIST;

    if( GetOpenFileName( &ofn ) )
    {
       ...:
    }

    以上、ご教授宜しくお願いいたします。
    2009年2月25日 2:16

回答



  •  VistaスタイルではGetReadOnlyPref()がサポートされていないのでチェックボックスの表示も無理なのではないでしょうか。

     参考URL
      http://msdn.microsoft.com/ja-jp/library/35x46672.aspx

    • 回答としてマーク runta 2009年3月2日 10:51
    2009年2月26日 7:57
  • runta さん の発言:

    OFN_HIDEREADONLY を指定していない場合(読み取り専用チェックボックスを表示させたい)でも
    もし Vistaスタイルでサポートされていないパラメータなのであれば、上記と同じように古いスタイルで指定したパラメータ通りに
    起動して欲しいのですが、ダメなようです。



    フラグの状態からは「読み取り専用のチェックボックスを表示して欲しい」という明確な意志を読み取ることは難しいと思います。

    昔の設計が悪かったと言えばそうなのですが、非表示にするという否定要素でビットを立てるということになっていたため、デフォルト = 0でチェックボックスが表示されていました。
    今回、Vistaでの仕様変更でチェックボックスが取り外されていますので、デフォルト = 0でチェックボックスがないという状態を指し示しています。

    OFN_ENABLETEMPLATE等は、テンプレートを使うという意思表示なので、自動的に古いスタイルが使用されるんだと思いますが、読み取り専用チェックボックスについては明示的に表示して欲しいことを主張するフラグが存在しないので、自動的に古いスタイルにはならないのでしょう。


    互換性と言われると難しいところではありますが…。
    # このような変更がされるってことは、読み取り専用のチェックボックスはあんまり使われていないって感じだろうかな。
    解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。
    • 回答としてマーク runta 2009年3月2日 10:51
    2009年2月26日 13:39
    モデレータ

すべての返信



  •  VistaスタイルではGetReadOnlyPref()がサポートされていないのでチェックボックスの表示も無理なのではないでしょうか。

     参考URL
      http://msdn.microsoft.com/ja-jp/library/35x46672.aspx

    • 回答としてマーク runta 2009年3月2日 10:51
    2009年2月26日 7:57
  • 雅さん、ありがとうございます。

    やはりそういうことなのでしょうか。。

    OPENFILENAME のFlagsメンバに、 OFN_ENABLETEMPLATE など、
    ビスタスタイルで使用不可とされているパラメータを指定していると、
    Vista であっても自動的に古いスタイルで起動され、指定したパラメータは有効になるようです。

    OFN_HIDEREADONLY を指定していない場合(読み取り専用チェックボックスを表示させたい)でも
    もし Vistaスタイルでサポートされていないパラメータなのであれば、上記と同じように古いスタイルで指定したパラメータ通りに
    起動して欲しいのですが、ダメなようです。

    なんか腑に落ちない動きのような気もしますが。。



    2009年2月26日 10:35
  • runta さん の発言:

    OFN_HIDEREADONLY を指定していない場合(読み取り専用チェックボックスを表示させたい)でも
    もし Vistaスタイルでサポートされていないパラメータなのであれば、上記と同じように古いスタイルで指定したパラメータ通りに
    起動して欲しいのですが、ダメなようです。



    フラグの状態からは「読み取り専用のチェックボックスを表示して欲しい」という明確な意志を読み取ることは難しいと思います。

    昔の設計が悪かったと言えばそうなのですが、非表示にするという否定要素でビットを立てるということになっていたため、デフォルト = 0でチェックボックスが表示されていました。
    今回、Vistaでの仕様変更でチェックボックスが取り外されていますので、デフォルト = 0でチェックボックスがないという状態を指し示しています。

    OFN_ENABLETEMPLATE等は、テンプレートを使うという意思表示なので、自動的に古いスタイルが使用されるんだと思いますが、読み取り専用チェックボックスについては明示的に表示して欲しいことを主張するフラグが存在しないので、自動的に古いスタイルにはならないのでしょう。


    互換性と言われると難しいところではありますが…。
    # このような変更がされるってことは、読み取り専用のチェックボックスはあんまり使われていないって感じだろうかな。
    解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。
    • 回答としてマーク runta 2009年3月2日 10:51
    2009年2月26日 13:39
    モデレータ
  • Azuleanさん

    ご回答ありがとうございます。

    やはり何か、仕様不備の臭いがするのですね。。

    おとなしくCFileDialogを使用するか、わざと明示的に古いフラグをダミーで設定するなどします。

    ありがとうございました。

    2009年3月2日 10:55