時乃工房-Windowsとアマグラマーな関係-

アクセスアップにオートリンクネット リンクが自動で増殖オートリンクの登録はこちら 節約内職情報検索局
ページランク向上リンク集
役立つリンク集 Web Links
SEO対策ディレクトリ型検索エンジン Su-Jine
メニュー
トップ
アマグラミング
C++編 目次
第6章
第8章
ソフトウェア開発製品
相互リンク

<勘違いだらけのアマグラミングな日々(C++編)>

第7章 選択肢を与える(1)

2006年8月30日

いつも思うことだが、枠だけのWindowは、なにかがらんとしていて寂しい。
そこで、一般的なメニューバーツールバーステータスバーを取付け彩りを添えることにした。
とりあえず、見た目だけでも・・・

<役に立たないメニュー達のサンプル>

さて、まず左図のようなメニューを追加してみることに。

ひとつふたつではつまらないので、思いつく限りに並べてみようと思い、リストアップから始める。
こうしておけば、後で不要なものをコメントアウトするだけで済むし、ビルドした実行ファイルもクリックして遊ぶことも出来るし(?)。

しかし、メニュー項目ひとつひとつの機能を用意するのは面倒だったので、ファイルの終了だけ実行できるようにしてみた。






List.001-009
main_window.h
main_window.cpp
main_callback.h
main_callback.cpp
main_menu.h
main_menu.cpp
main_menu.rc
<ソースのダウンロード>

調子にのって項目を増やしたため、内容の割にソースが長いものになってしまった。
仕方が無いので、今回から別ウィンドウにてソースを確認していただきたいと思う。

こんなに長いのにプログラムの方はと云うと、前章のList.001-008からあまり変わりが無い。
なぜなら、もともとメニューの機能はWindow枠に備わっているもので、前回では使用しなかっただけのことだからである。

では、どのようにしてメニュー機能を使用するのか、と云うと・・・

   window_class.lpszMenuName=  "MAINMENU";

上記のように、関数WinMain()内でメニュー名を指定してやるだけである。
で、このメニュー名ってのはどこで定義しておくのかと云うと・・・
ファイル"main_menu.rc"の頭のあたりで書いた部分がそれ。

この"main_menu.rc"は、今回初めて紹介(?)することになったリソース定義ファイルである。
こいつは、C/C++言語のリファレンスをひっくり返しても出てこない
なぜならC/C++言語とはまるで関係のないファイルだからである。(←非常に誤解されそうな表現)
リソース定義ファイルは、リソースコンパイラによってコンパイルされ、リンカによってアプリケーションにリンクされるようである。
しかし、中途半端にC/C++言語の表記に似ているのは何でだろう?

それはともかく、このリソースファイルで必要な項目を定義してやれば、メニュー項目の追加は終了。
実に簡単である。
因みに、今回説明っぽい文章が多いのは、簡単すぎて書くべき失敗談が無かったからである(つまんない)。

こうして追加したメニューの為に、今度は"main_callback.cpp"内に"WM_COMMAND"メッセージの処理を追加しよう。
このメッセージは、ユーザーがメニューをクリックしたりした時にOSから送られてくるもの(実はメニューとは限らない)で、今回のプログラムでは拙作であるところの関数SelectMenu()を呼出している。
そして"WM_COMMAND"メッセージとともに送られてくるwParamの値には、先の"main_menu.rc"で定義しておいたメニューIDが入ってくるので、関数SelectMenu()で区別して処理してやっている。
別に関数SelectMenu()なんて用意せずに、関数MainCallBack()内で直接処理してやっても良い。

さて、久しぶりに長々と書いたところでなんなんだが、メニューはとにかく簡単なので、深いこと考えずにサラッとコーディングして完成させれば良いぶぶんだと思う。
何せ、残りのツールバーステータスバーは落とし穴ビシバシ(?)で大変苦労してしまうのだから。

<前章> <目次>





<時乃工房>
Net Office Nakai
メビウスリング投稿掲示板には小説日記ゲームアニメコミック小学生中学生などの掲示板過去ログがあります。相互リンクも募集中。