2011-01-30 6 views
31

Zastanawiam się, w jaki sposób utworzyć okno przy użyciu interfejsu Win32 API o konkretnym rozmiarze obszaru roboczego o rozmiarze.WinAPI: Utwórz okno o określonym rozmiarze obszaru roboczego

Kiedy próbuje utworzyć okno stosując następujący fragment kodu, całe okno jest 640x480, z chrom oknie zabiera część obszaru roboczego:

HWND  hWnd; 
WNDCLASSEX WndClsEx; 
ZeroMemory(&WndClsEx, sizeof(WNDCLASSEX)); 

WndClsEx.cbSize  = sizeof(WNDCLASSEX); 
WndClsEx.style   = CS_HREDRAW | CS_VREDRAW; 
WndClsEx.lpfnWndProc = DefWindowProc; 
WndClsEx.cbClsExtra = 0; 
WndClsEx.cbWndExtra = 0; 
WndClsEx.hIcon   = LoadIcon(NULL, IDI_APPLICATION); 
WndClsEx.hCursor  = LoadCursor(NULL, IDC_ARROW); 
WndClsEx.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); 
WndClsEx.lpszMenuName = NULL; 
WndClsEx.lpszClassName = TEXT("Title"); 
WndClsEx.hInstance  = hInstance; 
WndClsEx.hIconSm  = LoadIcon(NULL, IDI_APPLICATION); 

RegisterClassEx(&WndClsEx); 

hWnd = CreateWindowEx( NULL, 
      TEXT("Title"), 
      TEXT("Title"), 
      WS_OVERLAPPEDWINDOW, 
      CW_USEDEFAULT, 
      CW_USEDEFAULT, 
      640, 
      480, 
      NULL, 
      NULL, 
      hInstance, 
      NULL); 

Zakładając prostą matematykę nie będzie dość rozwiązać problem, jak wziąć pod uwagę rozmiar chromu?

Uwaga: Używam SDL po utworzeniu okna, ale zgaduję to wiąże się z wielkością okna i nie ma wpływu na jego wielkość.

Odpowiedz

32

Możesz użyć funkcji AdjustWindowRect lub AdjustWindowRectEx, aby obliczyć rozmiar okna, biorąc pod uwagę pożądany rozmiar obszaru roboczego.

+1

Korekta, oblicza współrzędne obszaru okna na podstawie współrzędnych obszaru klienta. –

+0

@Edmin: Dzięki. Poprawię to. – Ferruccio

+0

[Pokrewna odpowiedź] (http://stackoverflow.com/a/13793660/3427520) o tym, dlaczego 'AdjustWindowRect' nie może być używany z' WS_OVERLAPPED'. – zwcloud