雑記」カテゴリーアーカイブ

Vista 以降で CFileDialog において SetTemplate が使えない場合の代替方法

Mimura です。
先ほど、STEP_M 1.053 をリリースしました。

 

今回のネックは CFileDialog において Vista 以降の新しいファイルダイアログでは、
SetTemplate が使用できないことでした。

 

そこで、私もこの情報を見つけるまでにかなり時間がかかりましたので、
メモとして、また同じ悩みを抱えている人に有用な物となればいいかなと思います。

 

(あらかじめ断っておきますと、あんまりMFC を使いたくない人です。私。)

 

 

SetTemplate を使用する場合、大体が以下のようなコードとなっていると思います。

CMyFileDialog::CMyFileDialog(BOOL bOpenFileDialog, LPCTSTR lpszDefExt, LPCTSTR lpszFileName,
        DWORD dwFlags, LPCTSTR lpszFilter, CWnd* pParentWnd) :
        CFileDialog(bOpenFileDialog, lpszDefExt, lpszFileName, dwFlags, lpszFilter, pParentWnd)
{
    SetTemplate(0, IDD_CUSTOM_FILE_OPEN);
}

(STEP_M ソースコード MyFileDialog.cpp より)

XP,2000 ではこのコードで通りますが、

Vista, 7 では「サポートされていない機能を実行しようとしました。」
というエラーダイアログが表示されてしまいます。

 

 

そこで考えたくなるのが、Vista 以降のOSで SetTemplate を使う方法ですが、
現時点ではあきらめた方がいいと思います。

 

Visual C++ Team Blog  Vista-style File Dialogs with MFC
Microsoft 社の Visual C++ Team のブログでも、

the new Vista dialogs no longer supports hwnd template customization, your CFileDialog object will throw CNotSupportedException if SetTemplate is called on it. 

適当訳:[英語苦手なので、あまりにも訳が違っていたら指摘お願いします]
Vista の新しいダイアログは、テンプレートによるカスタマイズには対応しません。SetTemplate を CFileDialog で呼び出したら、CNotSupportedException をスローするよー。

というようなことが書かれています。

 

 

それではどうするかですが、
Vista 以降のダイアログにはそれの為の弄る方法が用意されています。

 

CMyFileDialog::CMyFileDialog(BOOL bOpenFileDialog, LPCTSTR lpszDefExt, LPCTSTR lpszFileName,
        DWORD dwFlags, LPCTSTR lpszFilter, CWnd* pParentWnd) :
        CFileDialog(bOpenFileDialog, lpszDefExt, lpszFileName, dwFlags, lpszFilter, pParentWnd)
{

    IFileDialogCustomize* custom;
    custom = this->GetIFileDialogCustomize();
    if(custom != NULL){
            // チェックボックスを追加する場合は以下のように。
            custom->AddCheckButton(IDC_CH_FILE_ADDPEND,L"ボタンのついか。",false);
        }
        custom->Release();
    }
}

 

抜粋して書きますと上記のようになります。

this->GetIFileDialogCustomize();

で IFileDialogCustomize のインスタンスを取得し、
custom->Add****

によって、ボタンやエディットボックス、ラベルやらを追加していきます。

なお、IFileDialogCustomize 系は、WINVER が 0x0600 以上でないと利用できません。
StdAfx.h 等で設定している方はご注意下さい。

 

設置した内容を取得する場合、上記の例のサンプルで行きますと、

 

IFileDialogCustomize* custom;
custom = this->GetIFileDialogCustomize();
custom->GetCheckButtonState(IDC_CH_FILE_ADDPEND,&checkstate);
custom->Release();

 

上記にありますように、
custom->Get****

によって、値を取得します。

 

どのような命令があるか、また、オブジェクトが使えるかということにつきましては、

IFileDialogCustomize Interface (Windows)
上記リンクを参照して下さい。

 

最後に、XP,2000 上でも、Vista 以降のWindows でも、両方で動くようにするソースですが、

CMyFileDialog::CMyFileDialog(BOOL bOpenFileDialog, LPCTSTR lpszDefExt, LPCTSTR lpszFileName,
        DWORD dwFlags, LPCTSTR lpszFilter, CWnd* pParentWnd) :
        CFileDialog(bOpenFileDialog, lpszDefExt, lpszFileName, dwFlags, lpszFilter, pParentWnd)
{
    IFileDialogCustomize* custom;
    custom = NULL;
    TRY {
        // Legacy OS [ – Windows XP]
        SetTemplate(0,IDC_CH_FILE_ADDPEND);
    } CATCH (CNotSupportedException,e){
        // New OS [ Windows Vista – ]
        custom = this->GetIFileDialogCustomize();
        if(custom != NULL){
            custom->AddCheckButton(IDC_CH_FILE_ADDPEND,L"ちぇっく。",false);
        }
        custom->Release();
    }
    END_CATCH
}

(STEP_M ソースコード MyFileDialog.cpp より)

というような、上記のコードはいかがでしょうか。
MFC 上では try – catch 構文は使えないらしく、TRY – CATCH – END_CATCH を使うようです。

そこで、まずは SetTemplate を動かし、
非対応エラー(CNotSupportedException) が発生してしまったら、
Vista 以降の IFileDialogCustomize を用いたカスタマイズを行う。という形です。

 

 

開発のご参考になりましたら幸いです。

絶賛開発中 – ICT2009

IMG_0119

はーんしーんたいがーす。

 

・・・。大阪のみなさんごめんなさい。あらかじめ謝っておきます。すいませんでした。

 

卒業後もずーっと続いていたごたごたがある程度終わり、
ICTスクールの課題の改良に取りかかりました。

 

提出期限を過ぎてから開発を開始するのは非常にあんぽんたんですが、
やっぱり、遅くなっても自分のやりたいレベルまではやりたいんですよ。

 

このプログラムは、阪神優勝の瞬間を、
PhysXつかって、飛び込みをする皆さんをシミュレーションしようという、非常にあほな物。
・・いいじゃん。やっても。

 

 

ICTスクール終わった後、PhysX を視覚化できるデバッグツールの存在を知り、
ノートPCで立ち上げてリモートデバッグしている状態がこれです。

メインPCでデバッガを立ち上げていたんですが、どーも見にくくて。
ノートPCで立ち上げてリモートデバッグさせたら、見やすくてやりやすくていいですね。
そして、自分のプログラムが実に実に適当な構造になっていることに気づかされました。

 

どこかから盛大な笑い声が聞こえてきそうです。

 

 

 

IMG_0121 IMG_0120

 

とりあえず。デバッグしてる光景を。

 

スクリーンショットで貼り付けると、細かいところまで見られかねませんし、
どんな感じでやってるのかが分からないと思いまして、
カメラで撮影した写真で。

 

細かいところは見ないでね!

よつばとひめくりかれんだー。

あーあ。どうしよう。

高校卒業してから、どうも自制ってもんが無くなった気がします。みむらです。

 

 

ブログもほら、こんなにどんどん書いてみて。
やること無かったり、なにか現実逃避したいときにこうなるんですね。

 

そんなわけで、

 

「よつばとひめくりかれんだー! 2010!」

 

さきほど、何を思ったかこれを購入してみたわけです。
売り切れで買えないからいいやー。とか気を落ち着けていたら、売っているんですよね。
まったく。Amazon さんはひどい人です。 私からお金を奪っていく (ぇ

 

そんなこんなで。送られてくる頃には熱が冷めてるのかな-。どうだろーなー。

 

追記(3月12日):
無事に発送手続きに入られてしまったようです。
Amazon も、「在庫あり。」表示に切り替わり、
私みたいなある意味の「被害者」を増やすことになるようです。

ICT2009 終わってみた。わけですよ。

ども。Mimura です。祭り終わりました。

とりあえず、秋葉原の記事の時にも書きましたが、体調不良で死んでました。
ああ、人間ってここまで出来るのか。っていう感じが最初のうちはしてました。うん。

 

でも、スクール直前の5日間ぐらいは、頭痛だけで収まりまして、
頭痛がピークを引いた時にはコードを書いて、増してきたらキーボードから手を離す。
かなりつらかったです。バファリンの効能が、だんだんと効かなくなってくるんですね。こわい。

 

まぁ、でも、直前2~3日は、結構楽な時が長くて、コーディングできました。
夜になると脳みそが解放されるんですね。すばらしい。
今回のスクールは頭痛との戦いだったと言っても過言ではないでしょう。
初日も、弱いジャブぐらいの頭痛がぽんぽんきて、積み重なって、ノックアウト直前になりつつも、
やっぱりメンバーに迷惑はかけられまい。と、根性でキーボードの上に手を置いて、ディスプレイを見つめていました。

 

そういえば、秋葉原の時。あれ、どう見ても「ノロウィルス」ですね。
症状を見て、「おぉ! これじゃないか!!」 って。完全一致しててびっくりしましたよ。あれには。

 

そして頭痛ですが、秋葉原でPCを見ると収まって、店を出てくるとだんだんと増えてきて。
こまりましたねー。あれには。
でも、PCを眺めている間は頭痛が治まる。やっぱり、PCってのは薬なんですよ。
友人からは「病気」と言われましたが、薬なんです。あれは。

 

一応頭痛については、企画リーダーの和田先生に「頭痛がひどくてたまらないですよ-!w」といって、
「好かれてるなぁー」とかそんなことを言われてからというもの、頭痛がぐっと治まりました。
やっぱり光ってたんだなぁ。怖し怖し。

 

 

とりあえず、スクールとしては例年と変わらず、私の部屋で連日祭りが発生して、夜寝るのが遅くなってみたり、
最終日前日は寝ないでやってみたり、
@blankblank さんにかなり弄られながら過ごしてみたり。お人形は乗せません。
PCの裏側とか見えないところに貼り付けるのであれば問題ないですが。

あとは、個室で聞こえないはずの和田先生の声が最終日前日に聞こえてみたり。
「その冗談はー」とか言われましたが、確かに聞こえました。幻聴ですかね。
いや、あのホテルは呪われてるんだ。

 

それにしてもあれですね。近畿地方の方は非常に気さくながらも、やっぱりある程度のラインをわきまえてますね。
私の方の所の友人ですと、相手を弄ってみようとして、気分を害する所まで駒を進めてしまうことがよくあるのですが、
やっぱりそういうことがない。やっぱりお笑いのあふれる地域だけありますね。
・・ったくもう。最近は落語と友人との会話ぐらいでしか笑ってないや。 これだからいけないんだろうなぁ。

 

あと、特筆したいのは、@kgbgbhbb さんと、@rapwind さんの髪留め。
あれはいいかもしれない。
@kgbgbhbb さんのは、見た瞬間私のツボに入り、何もコメントできなかった。
いやはや、あんな一つのアクセサリーだけであそこまで楽しくさせてくれるものか。
スクール中においての最大のネタであったように思います。
変に誘おうとするんじゃなくて、純粋に持って行こうとする笑いがいいのだと思います。

 

@rapwind さんの髪留めについては、あれは。うん。
正直、こういうやついるなぁー。と思った。そう。何ともまぁ、ギャップがないというか。あり得すぎてよかった。
可愛いという感情が見た瞬間わいてしまったことは事実ですが、
すぐに自分より1歳下の男であるという情報がそれをすぐに打ち消した。
あれでそのまんま女子だったら、「ほぉー。かわいいなぁー」と。発言していたに違いない。怖いものです。
ただ、これだけは言わせてほしい。「似合ってた、やっぱりイケメンだ君は。」と。

 

まぁ、きっとその当人はこのブログは見ていないだろうと信じてそんなことを書いてみる。うん。

 

まぁ、例の動画と画像はよりによって保存してあって、
ちゃんとデータバックアップが自動的にとられたので、削除するのも大変かな-?w と思いつつ、
いや、サイバーアタックで消しにきそうだからなぁ。 学校のサーバにもコピーしてバックアップしておこうかなぁ。

 

 

で。ですよ。
普通にこの文章じゃ内輪しかわからないわけです。
そんな感じでここからは少しまじめな記事を。

 

今回ICTスクールで作ったものは、阪神ファンなら知っているであろう、
阪神優勝の時に、戎橋から皆さんが飛び込むのを、なんと豪勢にPhysX を使ってシミュレーションしようという、
非常にあほな感じのもの。でも、裏ではまじめです。

 

学校でノートPC持って行って、何人かに見せましたが、まじめに見てくれたのは担任ただ一人。
他の人は「あほーww」 っていう感想だけで終わりました。 悲しい世の中ですね。

 

とりあえず、現時点では
「PhysX Visual Debugger」という、非常にすんばらしいツールをスクール後に知りまして、
これを見ながらあたり判定の領域を補正したり、はやみんから要望があった、
陰とか当初制作してたオブジェクトを使った阪神優勝シミュレーションとか。そういうのに取り組んでます。
が、卒業式があったりしてなかなかに忙しい今日この頃です。困った困った。うーむ。

 

まぁ、何とかしようとがんばってはいます。
和田先生に頭痛のことを打ち明けてからというもの、頭痛が嘘のように消えましたので、
失われた時間を取り戻すかのごとくがんばってます。 あー。あの頭痛は誰かにうつったのかな-。

 

 

それにしても述べておきたいのですが、
制作チームの一人のはやみんはすごいですね。うん。是非とも書いておきたい。
今度あったら口頭でほめたいぐらい。今回の修羅場を何とかするために大きく関わってくれました。

いやでも、彼はすごいですよ。
「こうしましょーかー?」 って言って、常に救いの手をさしのべてくれる。そんな感じ。
それで、ちょちょいとやって、すぐに結果を返してきてくれる。すごい。彼は神様ですな。うん。

コンテンツ制作がすごいのに、それに加えてプログラムもばりばり書く。恐ろしやです。
それでもって、絵がすごくて、知識も私の知る範疇を大きく超えていて。
いやね、私の出る幕ないですよ。今回は絶対にチームの中で私が一番知識なかったと思いますし、
プロジェクトの半分以上が彼の努力であったと言っても過言ではないと私は思いますね。
いや。すごい。すごい悦材ですよ。うん。
私なんて、チームの片隅でがりがりプログラムコード書いていた一人にしか過ぎませんから。

 

いやー。あんな知識があって、頭よくて、絵が出来て、責任感もあって、運動できて、
おまけに可愛い かっこいいイケメンな方だからもう。なんだ。パーフェクトじゃないか。すげぇ。
やっぱり考え直してみると、私が到底たどり着けなさそうな人だな。うん。
圧倒的に私の努力のなさですね。すいません。

いやでも、昨年度はベクトルとか一切知らないのに、ICTスクールで3D触って「なんじゃこりゃー」となり、
今年は物理の授業を全く受けていない(うちの学校「物理」のカリキュラムがないんですよ-!」)のに、
物理演算なんてやって。まったくもう。脳みそがオーバーヒートしますよ。

その文知識がある人は引き出しがいっぱいあるわけですから、こうしよう、ああしようと浮かぶわけですが、
私にはないわけです。ほしいなぁ。大学でいっぱい作ろう。じゃないと、人間になれない。

 

まぁ、うちの学校では、数学についてもベクトルとか数列とかその辺が、
「通常カリキュラムでやらなくていいでしょう!」
というような、大変おふざけなカリキュラムとなっている関係上、なかなかすてきなのです。
「選択授業」という形で、その部分の授業をしてもらいました。ありがたやー。

 

理科についても、「地学、生物、科学、物理」の中から、選ぶという形だったのですが、
当然私はおもしろそうな気がしたので「物理」を選びましたが、「物理選択者いないもん」っていうことで、
「科学」に移りました。こまったこまった。

現在ですと、物理の授業が出来る教師が学校にいないんだとか。風の噂で聞きました。

 

公立高校って、共通のカリキュラムで授業するんじゃないんですか-!
って言いたくはなるのですが、なんかうちの学校は激しく独自路線を走っている模様。いかんなぁ。いかんなぁ。

 

まぁ、愚痴はこんな所にしておいて、
1.提出日までに要望をクリアできるようにがんばってみる&私自身の最大能力を測る!
2.「人間」から「猿」そして、それよりもずーっと前にいる「私」を、どうにかして類人猿まで近づけられるように。
何とか自宅学習期間というフリーな時間を使ってしてみようかと。
それが自宅学習期間の正しい使い方だと思うのです。

 

・・・勉強というか、自分の興味がわいた方面の学習はすごく楽しいので、物理を-。と。
それ以前に少なくとも、「日本語」と「英語」を人並みに使える程度にしなければ。あー。問題は山積みですね。

 

まぁ、うん。そんなこんなで。 寝るっ。

いっぱいにものを買ってしまった日。

IMG_0099

 

ども。Mimura です。財布も外も、寒く冷たく、大変厳しい時期になってきました。

 

とりあえずですね。大学用のノートPCということで、
大学からの「推奨パソコン買って!」っていうのを大幅に無視して買ってきました。(ぉ

さらに、頭痛と吐き気の中、朝は朝食が嘔吐で食べられないほど衰弱した中、
「大正漢方胃腸薬」という特効薬を使って行ってきました。

 

どんな状況だったかとか、
どういう中でみてきたの-?と聞かれれば一言。つらかった。

普通に元気なときに行くべき。電車の中で、座ってしゃべっている連中をどかして、
座ってしまおうかと本気で思いました。 元気なときに行きましょう。

 


このあたりで力尽きて、これ以降は後日書いてます。


 

とりあえず。収穫として。

IMG_0105

 

買ってきたもの。いやはや、改めて見ると馬鹿ですね。
購入したもの一覧:

  • Sony VAIO VGN-SZ93NS
  • JUSTSYSTEM ATOK 2010 Premium
  • Microsoft Office PowerPoint 2007
  • Diskeeper 2010 ProPremier

 

いやはや。買った買った。

 

VAIO は大学用ノートPC。省エネ設定をいろいろといじってみたら、いい感じでバッテリーが持ちまして。
2~3時間持ってしまって、当初の私の予定からくるって、ICTスクール時にバッテリーを放電させようと尽力しました。

 

 

JUSTSYSTEM ATOK 2010 は、言わずとしれた IME です。
Google IME 使えって言われても、そうですか。としか言い様がないのですが、ATOK 派です。
文法の指摘だとか言い回し辞典だとか、めちゃめちゃ便利で使わせていただいております。誤変換率もかなり低いですから。
携帯の変換の方がPCより頭いいぞ! とか思ってしまっている悲しい方は、ATOK 入れましょう。
携帯より頭よくなります。 携帯に入ってるやつが、これの機能削減版みたいなもんですから。

でもこれ、Premium 版なもんで、学割効きません。そうですか、坊ちゃまは原価で買ってくださいということですか。
困りました。ただでさえ財布が寒いのに。そんな坊ちゃまじゃないですよ。私。
でも、Premium 版はすばらしくていいんだよね。特に辞書。国語辞書の開く率が尋常じゃありません。私の場合。

 

 

Office PowerPoint 2007 は、学割で買ってきました。もちろん。
言わずとしれたプレゼンテーションソフトウェアです。 OpenOffice 入れましょうという突っ込みが入りそうですが、
互換性の問題も怖いですし、操作に慣れたやつを使いたい。ただそれだけです。
そのほかのものは、VAIO に 2007 Office System Personal がついてくるのでそれでいいじゃん。 と。

 

 

Diskeeper 2010 は、デフラグソフトです。言わずとしれたなのかどうなのか不明ですが。
少なくとも、私は大好きなソフトです。これ入れないと気分悪くなります。立派な依存症状ですね。
でもこれいいんですよ。インストールして放っておくだけで、HDDの並びがよくなりますから。
そうそう、HyperFast という追加パッケージもあって、SSD のデフラグもしてくれるとか。
起動速度が異常なほど遅くなったとか、HDD の方が早いじゃん。っていう人は入れた方がいいのかもしれません。
が、私はSSD を友人宅でちょっと触ったぐらいしかSSD に触れてませんので、どうなのかは知りません!
SSD 怖い。まだHDD ですね。SSD が 5年ぐらい使っていても壊れないっていうことが実証されて、
スペースシャトルに搭載されてばりばり使われるようになったら、SSD 使ってもいいなぁ。あはは。

 

とにかく、USB メモリのデータが吹っ飛んだり、化けたりする現象を見ているので、
怖いのなんの。あんなことがあるってことを知ってしまったら、同じ方式のものをメインには使いたくないのが心情です。
だれか説得してくれる人がいたら是非とも説得してもらいたいです。このままではPCの波に乗り遅れてしまいます。

 

 

 

で。今回の一番の馬鹿さをあげるなら、重複してるんですね。パッケージが。
重複っていうとあれですが、バージョンアップ版ばっかり買ってるんですね。 人間そういうものなんでしょうか。

IMG_0101
ATOK 2010 Premium と 以前買った ATOK 2008 アカデミック版。

 

IMG_0100

Diskeeper 2010 Professional と ProPremier

 

IMG_0104

新旧ノートPCと、Office Personal 2003 と 2007 + PowerPoint

 

とまぁ、こんな感じでなかなかすごいことになってます。
特に、ATOK 2008 については、ライセンスが余りました。どうしましょうかお兄さん。

 

まぁ、こんな感じで。うん。PC馬鹿っぷりを見せつつ、秋葉原で購入してきました。

そういえば、Gainer っていう C コードでプログラミングできるプログラム基盤があったんですが、
これで私もハードウェアの世界に飛び出すぞ! って思っていたのですが、あまりの頭痛に、
捜査を適当にやって帰ってきました。 いや、ほんと、つらかったんです。
もっと探せば絶対にあったんだろうなぁー。 後悔。

 

 

そんな感じで。買ってきました。うん。 それだけです。

今日一日分のえすてる生活 » Blog Archive » 秋葉原で・・・
現場がどうだったかについては、同伴者のブログを見れば一発。そういうもんです。

 

ではでは。