2011-01-30 2 views
31

Mi chiedevo come posso creare una finestra utilizzando l'API Win32 con una specifica area del client .WinAPI: creazione di una finestra con una dimensione dell'area client specificata

Quando si cerca di creare una finestra utilizzando il seguente pezzo di codice, l'intera finestra è 640x480, con bicromato di potassio della finestra prendendo alcuni dei client area:

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); 

Supponendo semplice matematica non lo farà abbastanza risolvere il problema, come faccio a tener conto della dimensione del cromo?

Nota: sto usando SDL dopo aver creato la finestra, ma sto cercando di indovinare che è legato alla dimensione della finestra e non fa alcuna differenza per la sua dimensione.

risposta

32

È possibile utilizzare la funzione AdjustWindowRect o AdjustWindowRectEx per calcolare le dimensioni della finestra in base alle dimensioni desiderate dell'area client.

+1

Correzione, calcola le coordinate dell'area finestra in base alle coordinate dell'area cliente. –

+0

@Edmin: Grazie. Lo correggerò. – Ferruccio

+0

[Una risposta correlata] (http://stackoverflow.com/a/13793660/3427520) sul motivo per cui "AdjustWindowRect" non può essere utilizzato con "WS_OVERLAPPED". – zwcloud