CreateWindow로 창을 만들때 위치가 문제입니다.
도1도캣
안녕하세요 ~ 요새 한창 Win32 API 공부에 재미가 들린 경영학도입니다.다름이 아니라아래에 코딩된 소스처럼 CreateWindow로 창을 생성하는데 CreateWindow의 X,Y 파라미터에CW_USEDEFAULT를 주었습니다.운영체제최적의 위치를 찾아서 설정한다는데 맘에 안들게 그려져서요.임시방편으로GetWindowRect로 해상도를 구하고 2로 나누고 메시지 처리 프로시저에서 창이 생성될 때 가운데로창을 옮겨버리는데 ... 좀 귀찮네요 ... 혹시 CreateWindow의 X,Y 파라미터의 인수들을 아시는 분 계신가요 ?답은 다이얼로그밖에 없는건가 .......
#include windows.h
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);void MoveWindow(HWND hWnd);HINSTANCE g_hInst;LPCTSTR lpszClass = Enterprise__;
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstace, LPSTR lpCmdLine, int nCmdShow){ HWND hWnd; MSG Message; WNDCLASS WndClass; g_hInst = hInstance;
WndClass.cbClsExtra = 0; WndClass.cbWndExtra = 0; WndClass.hbrBackground = (HBRUSH)GetStockObject(LTGRAY_BRUSH); WndClass.hCursor = LoadCursor(NULL, IDC_ARROW); WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION); WndClass.hInstance = hInstance; WndClass.lpfnWndProc = WndProc; WndClass.lpszClassName = lpszClass; WndClass.lpszMenuName = NULL; WndClass.style = CS_HREDRAW | CS_VREDRAW; RegisterClass(&WndClass);
hWnd = CreateWindow(lpszClass, lpszClass, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 200, 150, NULL,(HMENU)NULL,hInstance,NULL); ShowWindow(hWnd,nCmdShow);
while(GetMessage(&Message, NULL, 0, 0)) { TranslateMessage(&Message); DispatchMessage(&Message); } return (int)Message.wParam;}
LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam){ switch (iMessage) { case WM_CREATE: MoveWindow(hWnd); return TRUE;
case WM_DESTROY: PostQuitMessage(0); return 0; } return(DefWindowProc(hWnd, iMessage, wParam, lParam));}
void MoveWindow(HWND hWnd){ RECT Temp01, Temp02 ; LONG iX, iY, iWidth, iHeight ; GetWindowRect(GetDesktopWindow(),&Temp01) ; GetWindowRect(hWnd,&Temp02) ; iWidth = Temp02.right - Temp02.left ; iHeight = Temp02.bottom - Temp02.top ; iX = LONG((Temp01.right - iWidth) / 2) ; iY = LONG((Temp01.bottom - iHeight) / 2) ; MoveWindow(hWnd, iX, iY, iWidth, iHeight, TRUE) ;}