 |
それまでの Roy.って? |
私と WTL
の出会いについて簡単に話しておくと、ことの始まりは Mystique というツールの開発で VB の限界というか己の Windows
に対する知識不足を痛感したからでした。
C
言語にあまりいい印象のなかった自分ですが(どっちかというとアセンブラやってポインタ覚えた口ですし、アセンブラのパズル的な要素がすごく面白いと思っていました)
Windows プログラムの始めも、VC++ だったんですよね。
その頃は VC++ 5.0
が発売されたあたりで、初めて入社した会社で VC++ の CD-ROM
を渡され、「これを使えるようにして」といわれ途方にくれたものです(笑)。そもそも Windows
さえたいして使ったこともなく、ドキュメントビューってなんのこっちゃ?って感じでしたから。
もちろん当時も書籍を読みながら、しようもないアプリは作っていたのですが、高度なことをやるためにどうしていいのかわからず、また隣で「すごい速度で開発がすすむ
VB」 を見て(笑)、時代は VB じゃないの?なんて思い立ったのが運の付き?以後、VB 道を歩んできました。
※なんで VB
にはあのころからインテリセンスがあったのだろう?
C++
の経験もろくにない自分でしたから、VB を使う際も VB の半端なオブジェクト指向など気にもなりませんでしたし、単純処理の遅さや、VB
ランタイムがサポート(ラップ?)していない部分には不満がありましたが、Windows の複雑さを理解せずともやるべき処理だけを書けば良い
RAD というスタイルが気に入っていました。
もちろん VB
で簡単にはできない部分や問題が出てきたときには試行錯誤したり、よくわかっていないながらも Google
のような検索エンジンで先達の知恵を拝借したりしながら、なんとか API
を使って解決していました。もちろん、しょっちゅう例外を出していましたが(笑)
VB
になれた自分にとって、VC++ でのアプリの魅力といえば、高速で制限が少なく単体でバイナリを配布できることにありました。ただ、自分は MFC
で挫折したままでしたし、特にそこまでの必要を感じていなかったためか、なかなか手を出さないままこんな年になってしまいました。そもそも .net
ですべては解決と思ってましたし。
※特にフリーやシェアのソフトを出すのに
VB に抵抗のある人は多いようで。
ところが、職場を変えたことが転機となります。Oracle の DBA として契約したはずが開発を手伝うことに。以前から「速いもの作れるかもしれないけど、VC++
で Windows のアプリは開発効率が悪いのでは?」というイメージから、プログラムを作って行く中で、だんだん「C++と Windows
を極めたい」と変化してきたのです。
※しかしいきなり ATL+COM
っていうのは厳しかった・・・
1年ほどは Mystique
を製品としてリリースすることに専念していましたが、同時に VB で開発する際の限界を感じるようになりました。また、期待した .net
がネイティブコードコンパイルがサポートされていなかったこともあって、アプリケーションの高品質化や高速化という課題に直面してしまいました。
そこでいよいよ VC で
Windows アプリケーションを作ることになるわけですが、VB から API を使ったことはあっても(SendMessage とか
Hook とか)、Windows の Message 周りがさっぱりわかっていませんでした。また仕事では ATL + COM で COM
コンポーネントを作ったことがあるだけで、アプリケーションは作ったことがなかったのです。
ということで、「猫でもわかるプログラミング」のページを参考に、SDK をひとつずつゆっくりと始めたのでした。
 |
SDK との出会い |
というわけで、粂井さんの「猫でもわかるプログラミング」のページをひとつずつすべて手で打ち込んで、試行錯誤しながら勉強させていただきました(感謝)
いくつか情報が古いので動かないものがあったものの、逆にこれを動くようにすることで本当に理解できているかどうかを問うのにちょうど良かった気がしています。
ただ、正直な感想として泥臭いなぁと思ったわけです>SDK
確かに何でもできるかもしれない、けど今の時代にベタで C
なの?って。1日に3本も打ち込んでいれば、またこれか・・・って感じの部分が多いですし、ライブラリコールがあるアセンブラとなにも変わらないような手数の多さに、こりゃ辛いと思ったわけです。
※ちなみに僕は Motorola 系がすきでした
また、ページにも書いてあるとおり、あまり詳しい部分については触れられていません。たとえば、どうして WNDCLASSEX 構造体の
hbrBackground に +1 した値を入れなきゃいけないのか?そんな疑問には答えてくれませんでした。
さらに 35 章でメッセージクラッカーが出てきますが、それ以後も変わらずメッセージを長い switch
文で処理するわけで、ちょっと大きなアプリケーションを書けばすぐに破綻するなと思いました。というか Web
で公開されている複雑なサンプルのソースや、自分のバグを追求するのがすごく大変だったんです(特にこっちがきちんと Windows
をわかっていないので)
あるとき師匠から
Programming Windows 第5版を紹介され、まさしく自分の探していた情報にたどりついた気がしました。
※これは本当に勉強になる本なので是非読んでみてください
さらに仕事では ATL の AtlControls.h
とかを使っているので、コモンコントロールをクラスとして扱える便利さが恋しくて仕方ありません。
特に高度なコモンコントロール(Toolbar、Rebar)あたりを触り始めると、その複雑さにマジで参ってしまいました。やりたいことにたどり着く前に挫折してしまう。しかも
SDK
の場合に汎用性を考えると、クラスではないけども「何かを作るだけ」のようなサブルーチンがたくさんできてしまうのですが、サブルーチンなだけに今ひとつな訳でして。
※たとえば、Rebar
を作るサブルーチンみたいな(引数たくさん)
 |
そして WTL を知る |
そこで次に模索し始めたのが Windows のラッパークラスのようなものです。ってこれが本当は身の丈を考えて MFC
を使っていればいいのですが、まあ自分の好みとかあるじゃないですか(ぉぃ
結局猫のページには
86章まで、きちんとサンプルを作って追いかけましたが、その後はさすがにソースを打ち込むのも面倒で、ほしい情報をかいつまむ形になりました。
※現在100章まで終わりました
で、そんなときに出会ったのが WTL
です。ま、会社の人が話していたのを小耳に挟んで探してみたわけですが、まず情報が少ない!肝心なことはヘッダファイルみろ!見たくなっており、たいていの情報は海外の掲示板です。日本のメーリングリストにも入りましたが、閑古鳥が鳴いてます。
※というか多分みんな聞くほど困っていない人達なのだろう
もちろん WTL 自体が Microsoft
の正式サポートを受けていないこともあり、不安な部分もあるかもしれませんが、ヘッダのみで作成されているので公開されていない部分が一切ありませんし、軽量な上にさまざまなクラスが用意されているので、ある意味至れりつくせりな気がしました。
いざダウンロードして使ってみると、最初から Rebar + Toolbar のフレームワークを作ってくれたり、XP の Luna
インタフェースに対応していたりと、本当に感動的なのですが、さすがに自分のやりたいことをするために、どこを変えればいいのかがわからない(泣)
※これを書いている時点で、本気で C++
をやろうとしてから現在3ヶ月
そこで、入門サイトを探しました。
しかし、これがなかなかありません。WTL
で引っかかる情報といえば、某タブブラウザに関するものか、なんかすごい実力のある人のサイトばっかりなんです。
しかも公式な本なんて売っているわけでないので、WTL 関連のサイトを巡って情報を集めることに。で、結局たどり着いたのが
Code Project。英語のサイトですが、入門編なんかは WTL
のメッセージループの部分の実装に迫っていたり(ちょっと難しいと思うけど)、簡単なサンプルを用意してくれていたりと便利です。
※とくに
Ed Gadziemski さんの記事が入門には最適
※最近 Michel Dunn
さんの連載が始まりました。必読!
ところが、そんなサンプルでも日本語特有の問題にぶつかったりするわけです。2バイト文字の時動作が変だったり、そんなこと考慮してない?みたいな部分があったり。
※リソースに何も表示されなかったりとか
あと、WTL
のオリジナルの動作が結構決めうちのところ(リソースの使い方とか)があって、これを変えていいものかどうか真剣に悩んでしまいました。それに、テンプレートクラス引数自体を継承するやり方の意味がさっぱりわからず、大混乱に。
でも人間頑張れば何とかなるものです。
というわけで、長々と話してきましたがひとつの簡単なツールを作るに至り、WTL
の魅力をみなさんにお伝えできればと、素人ながら大それたことを始める決意をしたのでした。
私もいろんなサイトの方にお世話になっているので、ここのサイトを参考にしてくれる人がいれば・・・いいなぁ。ということで、日が浅いので変なことやってたり、おかしな部分があると思いますが、その点に関しては
Program の掲示板の方までお気軽にどうぞ。
第1回へ
|