ダイアログウィンドウ


ダイアログアプリケーション

通常のアプリケーションのウィンドウはクライアント領域を持つ
これまで作ってきたウィンドウですが、そうではないプログラムもあります
Windows デフォルトで装備している Microsoft の CALC.EXE などです

CALC.EXE はすなわち電卓プログラムですが
このプログラムは、ウィンドウがダイアログのように作られています
これは実際に可能で、アプリケーションのトップレベルのウィンドウも
CreateWindow() ではなく CreateDialog() を用いて作ることもできるのです

ダイアログはこれまで同様に、リソースで表現します
しかし、DIALOG 文の中に CLASS パラメータを指定する必要があります

CLASS class

class には、有効なクラスの名前を " で囲んで指定します
これが、トップレベルのダイアログアプリケーションの特徴です
ここで指定するのは、プログラム側で定義した有効なウィンドウクラスです

こうすることで、このダイアログボックスは
指定したウィンドウクラスの性質を持つようになります
背景色、アイコン、カーソルなどの設定はウィンドウクラスのものになります

ただし、CreateDialog() で表示するウィンドウクラスの場合
cbWndExtra メンバの値は DLGWINDOWEXTRA を指定しなければいけません

プロシージャは、ウィンドウクラスで指定されているプロシージャが実行されます
そのため、CreateDialog() 関数の第4引数は NULL を指定することになります
また、親ウィンドウを指定する第3引数も 0 になるということは理解できるでしょう
//リソーススクリプト

KITTY DIALOG 10 , 10 , 100 , 50
FONT 12 , "MS ゴシック"
STYLE WS_VISIBLE | WS_POPUPWINDOW
CLASS "KITTY"
CAPTION "Magical nyan nyan TARUTO" {
	PUSHBUTTON "OK" , IDOK , 40 , 30 , 20 , 10
}
#include <windows.h>

LRESULT CALLBACK WndProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp) {
	switch (msg) {
	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
	case WM_COMMAND:
		switch (LOWORD(wp)) {
		case IDOK:
			SendMessage(hwnd , WM_CLOSE , 0 , 0);
		}
		return 0;
	}
	return DefWindowProc(hwnd , msg , wp , lp);
}

int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance ,
			PSTR lpCmdLine , int nCmdShow ) {
	HWND hwnd;
	HACCEL haccel;
	MSG msg;
	WNDCLASS winc;

	winc.style		= CS_HREDRAW | CS_VREDRAW;
	winc.lpfnWndProc	= WndProc;
	winc.cbClsExtra	= 0;
	winc.cbWndExtra	= DLGWINDOWEXTRA;
	winc.hInstance		= hInstance;
	winc.hIcon		= LoadIcon(NULL , IDI_APPLICATION);
	winc.hCursor		= LoadCursor(NULL , IDC_ARROW);
	winc.hbrBackground	= (HBRUSH)CreateSolidBrush(GetSysColor(COLOR_MENU));
	winc.lpszMenuName	= NULL;
	winc.lpszClassName	= TEXT("KITTY");

	if (!RegisterClass(&winc)) return -1;

	hwnd = CreateDialog(hInstance , TEXT("KITTY") , 0 , NULL);

	if (hwnd == NULL) return -1;

	while(GetMessage(&msg , NULL , 0 , 0)) {
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
	return msg.wParam;
}


これが、リソーススクリプトのダイアログテンプレートから
CreateDialog() 関数を用いて作ったアプリケーションウィンドウです
このウィンドウのアイコンなどはアプリケーションのものになっています



前のページへ戻る次のページへ