« 日記 | メイン | 日記 »

2005年03月23日

作戦記

mSTGTool

ついに作成する時がやってきました。
ここまで来るのにどれだけ無駄な時間を費やして来た事か……。
結局、モードレスダイアログボックス(パラメータ指定)+子ウィンドウ(座標指定)という形で行きます。
MDIにしようか迷いましたが、とにかくここは実現可能な形に収束させる事に。
というわけで、製作と同時進行で書いていきます。

以前のプログラム(mSTG)で悩まされたバグの意味がわかった

つまり、この前の日記でも書いたのと同じ罠にはまっていました。
よく考えたらそりゃ、左上の座標がわかったら後はそこからの相対距離で書く方が便利に決まっていますしね。

変数名の作り方

普通英語で書きますよね?
以前によんだサイトでは、その理由を西洋コンプレックスと分析していましたが、
私はローマ字では読みにくく、認識しにくくなるので英単語で書きます。
ですので、コーディング中にgooの和英辞典は必須です(笑)

デバッグ

Syntax Errorのなんと多き事よ

罠その2

BOOL Rectangle(
   int x1,
   int y1,
   int x2,
   int y2 
);
BOOL Rectangle(
   LPCRECT lpRect 
);
パラメータ
x1 
四角形の左上隅の x 座標を指定します (論理単位)。 
y1 
四角形の左上隅の y 座標を指定します (論理単位)。 
x2 
四角形の右下隅の x 座標を指定します (論理単位)。 
y2 
四角形の右下隅の y 座標を指定します (論理単位)。 
lpRect 
四角形を論理単位で指定します。このパラメータには、CRect オブジェクトまたは RECT 構造体へのポインタを渡すこともできます。 

これだから勘違いしていた、という事が発覚。
統一してくれないのは何でだろう、と思ったけれど、きっとこっちの方が便利なのだろう。
だがしかし、

ウィンドウの大きさ:370,490
Rectangle(hdc,30,30,340,460);

で、四角形がウィンドウからはみ出るのは納得できない。
何を考えて動作してらっしゃるんだ、むしろ一体どこで間違えたんだろう私は。

重要マクロ

LOWORD,HIWORD

なんでやねん

CreateWindowの引数でウィンドウの高さを490にしているのに、マウス座標の追跡で座標を見て行くと460の高さしか無い。

結局

原因不明のまま、小手先の対応であきらめた。
具体的には、作成されるウィンドウの大きさが想定していた物と同じサイズになるようにコード中のサイズ指定を変更。
きっと、私が何か勘違いしている事が原因なんだろうけれど……。
気持ち悪い。

#どうも、「デバイス単位で指定」というのが曲者な気がしてきた

びっくり

○ウィンドウプロシージャ
×ウィンドウプロージャ

私が馬鹿でした。
WndProcって書いてたのに、書いてたのに!

リソースエディタ

これは便利ですね。
テキストで自力指定していたら思い通りのデザインにするのにどれだけの時間がかかるだろうと考えると寒気。

nCmdShow

今まで起動時の引数を使いまわして来ましたが、よく見たらこれは単なる定義された定数のようで……。
何とは無しに損した気分。

モードレスダイアログボックス

どうも動作が不安定だと思ったら、ダイアログボックスに送られてきたメッセージをDefWindowProcに送っていた事が原因だったようで、
その部分を削ったら普通にダイアログボックスが表示されました。

紆余曲折を経て

完成しました。
ほんっとーに、VBで作った方が早いですね。
もっとも、VBの使い方はほとんど忘れてしまったので勉強し直さないと無理ですが。


少しは文字列について理解できたかも?
だがしかし、文字って色々あってしんどい対象ですね。
UNICODEなんてなくなってしまえばよいのに。

#完全に全てのシステムがUNICODE化されたら、むしろ楽になるのかもしれないけれど

ひまわり

http://hima.chu.jp/cgi/prog-bbs/hmw/453.txt

検索にたまたまひっかかったんですが、日本語のプログラミング言語を特徴とするひまわりからWIN32APIを使おうとしているコードです。
正直な話、ひまわりの外の物を取り込もうとすると必然的に英語が大量に出てくるわけで、逆に意味不明になっているように見えます。
まともに使おうと思ったら、この差を埋めるためのひまわり用ライブラリを作るしか無いのでしょうね。

投稿者 miff : 2005年03月23日 22:01

コメント



XREAAD