| 次の開発日記 | 一覧 |
以前の開発日記とだいぶ間が空きましたが、これからはXMLで書き続けていきます。 いくつか日記を書いたら公開予定です。今まで通り(おもいっきり)不定期な日記です。
最近はそれなりに忙しく、そのためコードを書けなくなると開発日記を書く気が起こらず、
暇を見つけてコードを書いていると開発日記を書く暇が見つからず、
という感じです。
でもコードを書いていると、色々新しい発見があるので、やっぱり書いてみたくなったので
暇を見つけて書いてみました。
最近シューティングゲームを作っているのですが、
これのデーターファイルの形式として、XMLに似たものを作ってみました。
正確にはXMLのサブセットみたいなもので、かなり機能を削ったXMLのようなものです。
これを使ってシューティングゲームに登場する機体の性能をデーターとして書いてみたのですが、
これが書きやすいこと書きやすいこと。
構造化(いくらでもネストできる)+要素名自由(いわゆるタグ名を自分で決められる)
+フォーマット無し(タグ名を使うときに宣言は必要なく、順番も自由)
という組み合わせでここまで楽できるとは思いませんでした。
別にどの機能も目新しいものではないのですが、私は「構造化+フォーマット無し」「要素名自由+フォーマット無し」
というデーター形式は考えたことがあるのですが、この3つを組み合わせることを
考えられませんでした。まさにコロンブスの卵という感じです。
というか思いつかなかった私が鈍いだけ?
環境 | 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を。残念ながらあまり利点は無いようですが・・・ でも他のコントロールの通知メッセージには使い道があったりするかもしれません。 心に止めて置いてチャンスがあったら使ってみて下さい。
ああ新装開店一発目から駄記事を・・・
| 次の開発日記 | 一覧 |