none
OpenFileDialog の項目IDの調べ方 RRS feed

  • 質問

  • 基本的な事で恐縮なのですが、
    OpenFileDialog の「ファイル名」項目を
    SetDlgItemText によりコードで指定する際、
    定数表現される「IDC_EDIT1」の実数値が分からず
    コード内でループを回し1148(47C)である事は分りました。

    同様な事象の際にループを回さず確認したいと思いますが、
    この宣言(define)はどこを見れば確認できますでしょうか?

    いろいろ調べてみたのですが、
    はっきりとした事が分かりませんでした。

    ご指導頂けますようお願い致します。
    2009年3月17日 7:15

回答

  • あさお さん の発言:

    同様な事象の際にループを回さず確認したいと思いますが、
    この宣言(define)はどこを見れば確認できますでしょうか?

    コモンダイアログのデザインは、Windowsのバージョンによって変わる可能性があるため、一意に定義されていません。
    従って、コモンダイアログの既定のコントロールに対して操作するという手法は、Windowsのバージョン依存の保証されていないやり方になります。
    (リソースを開くなり、Spyを使うなりでご自身で調べて、ご自身の責任で利用することになります)

    なお、Vistaではコモンダイアログが大きく見直されています。
    XPや2000でうまく動いても、Vistaやそれ以降のWindowsでは動かないという可能性があります。ご注意下さい。


    解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。
    • 回答としてマーク あさお 2009年3月19日 5:02
    2009年3月17日 15:50
    モデレータ
  • 根本的なこととして、OpenFileDialog.FileNameプロパティもしくはFileNamesプロパティを操作することでは問題解決しないのですよね?

    まず、OpenFileDialogクラスが内部でGetOpenFileName Functionを使用していることを知っている必要があります。
    そしてリンク先からcomdlg32.dllに実装されており、そこのリソースに含まれているだろうと予測できます。

    なお、Windows Vistaではダイアログが変更されているので実装されているDLLも違うはずです。
    その上で、Visual Studio 2008 + Windows Vista日本語版においては、Visual Studio側のバグによりリソースエディタが使用できません。
    Microsoftに問い合わせたところ、修正予定なしとの回答を得ています。回避策としてはWindows Vista英語版を使用して下さいとのことです。

    …でもこうやって調べることも含めて自己責任でやって欲しいとは思います。

    • 回答としてマーク あさお 2009年3月19日 5:03
    2009年3月18日 14:03

すべての返信

  • あさお さん の発言:

    同様な事象の際にループを回さず確認したいと思いますが、
    この宣言(define)はどこを見れば確認できますでしょうか?

    コモンダイアログのデザインは、Windowsのバージョンによって変わる可能性があるため、一意に定義されていません。
    従って、コモンダイアログの既定のコントロールに対して操作するという手法は、Windowsのバージョン依存の保証されていないやり方になります。
    (リソースを開くなり、Spyを使うなりでご自身で調べて、ご自身の責任で利用することになります)

    なお、Vistaではコモンダイアログが大きく見直されています。
    XPや2000でうまく動いても、Vistaやそれ以降のWindowsでは動かないという可能性があります。ご注意下さい。


    解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。
    • 回答としてマーク あさお 2009年3月19日 5:02
    2009年3月17日 15:50
    モデレータ
  • ご回答ありがとうございます。

    環境による一意性がない為に自己責任での使用という件は承知致しました。

    ・ リソースを開くなり
    ・Spyを使うなり

    という手法につきまして今回の件に限定して言えば、
    「リソース」は何を調べれば良かったのでしょうか?
    もう少しだけご指導を頂けますと幸いです。

    「Spy」については不勉強でした。調べてみます。
    2009年3月18日 1:48
  • 根本的なこととして、OpenFileDialog.FileNameプロパティもしくはFileNamesプロパティを操作することでは問題解決しないのですよね?

    まず、OpenFileDialogクラスが内部でGetOpenFileName Functionを使用していることを知っている必要があります。
    そしてリンク先からcomdlg32.dllに実装されており、そこのリソースに含まれているだろうと予測できます。

    なお、Windows Vistaではダイアログが変更されているので実装されているDLLも違うはずです。
    その上で、Visual Studio 2008 + Windows Vista日本語版においては、Visual Studio側のバグによりリソースエディタが使用できません。
    Microsoftに問い合わせたところ、修正予定なしとの回答を得ています。回避策としてはWindows Vista英語版を使用して下さいとのことです。

    …でもこうやって調べることも含めて自己責任でやって欲しいとは思います。

    • 回答としてマーク あさお 2009年3月19日 5:03
    2009年3月18日 14:03
  • 余計な枝葉を記載すると焦点がボケると思い敢えて記載しなかったのですが、
    マウスジェスチャーをエミュレートするプログラムで「OpenFileDialog」の
    「ファイル名」項目を外部より指定したいと思っていました。

    「OpenFileDialog.FileNameプロパティもしくはFileNames」での指定も可能ですが、
    極力、本体部に手を入れずエミュレート部から「ファイル名」項目に指定するには、
    「SetDlgItemText」を使用する手法を取りました。

    APIを触り始めたばかりで分からない事ばかりですが、
    できる限り自分で調査・実行しどうしても分からない事だけに
    皆様のお力をお借りできればと思っています。

    ご指導頂きました皆様ありがとうございました。

    2009年3月19日 5:12