ウィンドウ初期位置


デフォルトのウィンドウ位置

これまで、CreateWindow() 関数でウィンドウを生成する時
ウィンドウの初期位置、及び大きさを整数で直接指定しました
もちろん、これでも問題はありません

しかし、他の Windows アプリケーションの中には
初期位置や大きさが、起動するたびに変化するアプリケーションがあります
乱数を使えばこのような動作が可能ですが、そんな面倒なことをする必要はありません

ウィンドウの初期位置や大きさにこだわらないアプリケーションで
初期設定に迷うのならば、デフォルトの値を使うほうが効率がよいでしょう
CreateWindow() 関数の、ウィンドウの位置とサイズ指定の場所に
CW_USEDEFAULT 定数を指定すると、関数はこの引数を無視します
#include<windows.h>

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

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

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

	if (!RegisterClass(&winc)) return 0;

	hwnd = CreateWindow(
			TEXT("KITTY") , TEXT("Kitty on your lap") ,
			WS_OVERLAPPEDWINDOW  | WS_VISIBLE ,
			CW_USEDEFAULT , CW_USEDEFAULT ,
			CW_USEDEFAULT , CW_USEDEFAULT ,
			NULL , NULL ,
			hInstance , NULL
	);

	if (hwnd == NULL) return 0;

	while (GetMessage(&msg , NULL , 0 , 0)) DispatchMessage(&msg);
	return msg.wParam;
}
CreateWindow() 関数に注目してください
位置指定と幅指定に CW_USEDEFAULT を指定しています
これで、このアプリケーションを起動した時の位置などはウィンドウズに委ねられます



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