ウィンドウ初期位置
デフォルトのウィンドウ位置
これまで、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 を指定しています
これで、このアプリケーションを起動した時の位置などはウィンドウズに委ねられます