2011-01-30 11 views
31

Me preguntaba cómo puedo crear una ventana usando la API de Win32 con un tamaño de área de cliente específico.WinAPI: Crear una ventana con un tamaño de área de cliente especificado

Al intentar crear una ventana con el siguiente fragmento de código, toda la ventana es de 640x480, con el cromo de la ventana teniendo algunos del área de cliente:

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

Suponiendo matemática simple no lo hará bastante resolver el problema, ¿cómo tomo en cuenta el tamaño de Chrome?

Nota: estoy usando SDL después de crear la ventana, pero supongo que está ligado al tamaño de la ventana y no hace ninguna diferencia con respecto a su tamaño.

Respuesta

32

Puede usar la función AdjustWindowRect o AdjustWindowRectEx para calcular el tamaño de la ventana dado el tamaño de área de cliente deseado.

+1

Corrección, calcula las coordenadas del área de la ventana en función de las coordenadas del área del cliente. –

+0

@ Edmin: gracias. Lo corregiré. – Ferruccio

+0

[Una respuesta relacionada] (http://stackoverflow.com/a/13793660/3427520) sobre por qué 'AdjustWindowRect' no se puede usar con' WS_OVERLAPPED'. – zwcloud

Cuestiones relacionadas