MASATOの開発日記


前の開発日記 次の開発日記 一覧

2001/09/19

以前の開発日記とだいぶ間が空きましたが、これからはXMLで書き続けていきます。 いくつか日記を書いたら公開予定です。今まで通り(おもいっきり)不定期な日記です。

最近はそれなりに忙しく、そのためコードを書けなくなると開発日記を書く気が起こらず、 暇を見つけてコードを書いていると開発日記を書く暇が見つからず、 という感じです。
でもコードを書いていると、色々新しい発見があるので、やっぱり書いてみたくなったので 暇を見つけて書いてみました。

XML形式って便利

最近シューティングゲームを作っているのですが、 これのデーターファイルの形式として、XMLに似たものを作ってみました。 正確にはXMLのサブセットみたいなもので、かなり機能を削ったXMLのようなものです。 これを使ってシューティングゲームに登場する機体の性能をデーターとして書いてみたのですが、 これが書きやすいこと書きやすいこと。
構造化(いくらでもネストできる)+要素名自由(いわゆるタグ名を自分で決められる) +フォーマット無し(タグ名を使うときに宣言は必要なく、順番も自由) という組み合わせでここまで楽できるとは思いませんでした。
別にどの機能も目新しいものではないのですが、私は「構造化+フォーマット無し」「要素名自由+フォーマット無し」 というデーター形式は考えたことがあるのですが、この3つを組み合わせることを 考えられませんでした。まさにコロンブスの卵という感じです。 というか思いつかなかった私が鈍いだけ?

指定したWindowにボタンクリックメッセージを送る方法

環境Visual C++ 6.0
言語C++
使用ライブラリWin32SDK

あるダイアログ(か何か)上のボタンをクリックした時、そのダイアログにはBN_CLICKEDメッセージが送られる。 それをOnButton()関数で受けて色々処理をする・・・という記述は良く行うと思います。 では、このBN_CLICKEDメッセージを自力でSendMessageするにはどのように書けばよいのでしょうか? BN_CLICKEDというWindowメッセージでは無いようです。ではBN_CLICKEDとは何になるのでしょうか。 というわけで調べてみましたが、これの実体はWM_COMMANDメッセージになるようです。 送り方は次のようになります。(ボタンIDを仮にIDC_BUTTONとします)

SendMessage(WM_COMMAND, MAKEWPARAM(IDC_BUTTON, BN_CLICKED), (LPARAM)GetDlgItem(IDC_BUTTON)->GetSafeHwnd());

WPARAMの下位にはボタンID、上位にはBN_CLICKED(この上位に来るコードを通知コードと言ったりするらしいです) そしてLPARAMにはウィンドウハンドルが入ります。 BN_CLICKEDだけではなく、リストボックスやコンボボックス等の様々なコントロールの 通知メッセージはみんなこんな感じになるようです。

では一体こんなメッセージを送信して何か役に立つのでしょうか? OnButton()関数を直接呼べばいいだけでないでしょうか。 はいその通りです。 一応SendMessageで送信する方法の利点を述べさせて頂くと、 OnButton()関数を削除しても正常に動く(つまり何も起きない)ということです。 ボタンまで削除してしまうとIDC_BUTTONというIDが無いためエラーが出るかもしれません。 でも普通最終的にはOnButton()関数は書きますよね。 SendMessageは、ボタンを押したというメッセージを自分自身に送り、その処理を任せるという 自然な処理と言えるかもしれません。 というわけでこだわる方は是非SendMessageを。残念ながらあまり利点は無いようですが・・・ でも他のコントロールの通知メッセージには使い道があったりするかもしれません。 心に止めて置いてチャンスがあったら使ってみて下さい。

ああ新装開店一発目から駄記事を・・・

前の開発日記 次の開発日記 一覧