OPENFILENAME は古い

C# ばかりやっていたら頭が腐りそうなので今日は慣れた C++ を。

今回は Cinema にリストアップ拡張子選択機能を付けて更新しようと考えた。
ついでに開くダイアログを改造していたのであるが…

OPENFILENAME 構造体に lpfnHook を指定したら古いダイアログになっちまった。
なんでじゃい!

CFileDialog::m_ofn

なんてこった、GetOpenFileName 関数はこんなに変わっていたのか。
このサポートされなくなったメンバを使わなければコンパイル時に新しいのに置き換えられる。
ということみたい。

ExpLZH の保存ダイアログが古いのとかが気になっていたのだがそういうことだったか。
でも秀丸とかはカスタマイズしているのに Vista スタイルになっているよな?
何か方法があるのだろう、調べてみよう。

で。

どうやら Vista 型式のダイアログは COM の IFileDialog を使うようである。
何故 COM なんだ?と文句を書いてもしゃーないので作るしかない。

MSDN じゃ全然解らない!サンプルにも見あたらない!
日本語で探しても解りにくいので「ウエブ全体」でググる。

CodeProject: Vista Goodies in C++: Using the New Vista File Dialogs. Free source code and programming help

流石に老舗のココは解りやすい。
CComPtr なので ATL での解説だけどなんとかなるだろうと書いてみる。

何故だろう?
SHCreateItemFromParsingName の引数がどこを探しても3つなんですけど…
私の Visual Studio では4つあるんですけど、デフォルト引数でもないし…

あぁ更に解らない!ということで更新は又今度。