戻る 第8章 コントロールの使用
(ボタン)
次へ

ソース 実行ファイル
sdk08.cpp sdk08.exe

今回からコントロールについての解説です。
VisualCをある程度使っている人は
そんなのリソーススクリプトでつくればいいじゃん!
と思うかもしれませんが
しかし私はリソースを使うのが嫌いですし
こうしてプログラムでコントロールを作る説明が
載ってる場所も少ないこともありますし
何かの拍子にプログラム中から作らなければ行けない場面が
あるかもしれないです。
そういったニーズにお答えして今回からプログラムから作る
コントロールを解説します。

まずはボタンです。

そのまえにひとつ覚えておいていただく事があります。
WindowsにとってはコントロールもひとつのWindowだという事です。
ボタンであろうとリストボックス,コンボボックスであろうと
チェックボックス,グループボックス,それらはすべてWindowなのです。

察しが良い方は気づいたかもしれないですが
コントロールを作る関数もCreateWindowなのです。


#include <windows.h>

LRESULT CALLBACK WinProc(HWND hwnd, UINT msg,WPARAM wP, LPARAM lP)
{
	HDC	hdc;
	PAINTSTRUCT ps;
	char str[40];
	switch(msg){
		case WM_CREATE:
			button=CreateWindowEx(0, 
					"BUTTON",//ボタンクラスを指定 
					"ぼたん",//ボタンに表示させるテキスト
					WS_CHILD,//子Window指定
					48, 48,128, 32,//ボタンのサイズ
					hwnd,
					(HMENU)ID_BTN,//ボタンのID
					(HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE),
					NULL);
			ShowWindow(button,SW_SHOW);//ボタンを表示
			break;
		case WM_COMMAND:
			switch ( LOWORD ( wP ) )
			{
				case ID_BTN://ボタンを押したら来る
					MessageBox(hwnd,"ボタン押したよ","BUTTON",MB_OK);
					break;
			}
			break;
		case WM_DESTROY:
			PostQuitMessage(0);
			break;
		default:
		return DefWindowProc(hwnd, msg, wP, lP);
	}
	return 0;
}

さて,ざっとプログラムを載せてみました。
ボタンはかなり簡単です。
これだけで表示と応答をこなしています。
"CreateWindow"でクラスに"BUTTON"を指定してボタンを作り
そのボタンのIDに反応があればメッセージボックスを出します。

また新しいメッセージが出てきましたね。
WM_COMMANDです。
これはいろいろなときに呼ばれますが代表的なものとして
ボタンなどのコントロールから呼ばれます。

今回の場合Windowsの立場になると..
「コントロールが反応したぞ〜!」
「wPには反応したコントロールのIDを渡せ〜!」
「WM_COMMANDメッセージを送れ〜!」
ここまでがWindowsがしてくれることです。
あれ?と思った人が入るかもしれません
そう!Windowsは決して「○○のボタンが押されたぞ〜!」とは反応していません。
あくまで「IDで識別している」だけなのです。
ですからコントロールが複数ある場合はIDは重複し無いように気を付けましょう
作りようによっては絶対に重複しない場合もありますが
後のソースの可読性も考えて別にした方が良いです。

復習問題:
1.ボタンを押すとテキストを出すようにしましょう。
2.ボタンをもう一つ出しましょう
3.2つ目のボタンを押すと違うメッセージを出すようにしましょう。