2011-01-30 26 views
31

Tôi đã tự hỏi làm cách nào để tạo cửa sổ bằng API Win32 với kích thước khu vực khách hàng cụ thể.WinAPI: Tạo cửa sổ có kích thước khu vực khách hàng được chỉ định

Khi cố gắng để tạo ra một cửa sổ bằng cách sử dụng đoạn mã sau đây, toàn bộ cửa sổ là 640x480, với chrome của cửa sổ dùng một số các khu vực khách hàng:

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

Giả sử toán học đơn giản sẽ không hoàn toàn giải quyết vấn đề, làm cách nào để tôi xem xét kích thước chrome?

Lưu ý: Tôi đang sử dụng SDL sau khi tạo cửa sổ, nhưng tôi đoán nó bị ràng buộc với kích thước cửa sổ và không có sự khác biệt về kích thước cửa sổ.

Trả lời

32

Bạn có thể sử dụng chức năng AdjustWindowRect hoặc AdjustWindowRectEx để tính kích thước cửa sổ cho kích thước vùng khách hàng mong muốn.

+1

Hiệu chỉnh, nó tính toán tọa độ của khu vực cửa sổ dựa trên tọa độ của khu vực khách hàng. –

+0

@Edmin: Cảm ơn. Tôi sẽ sửa nó. – Ferruccio

+0

[Câu trả lời liên quan] (http://stackoverflow.com/a/13793660/3427520) về lý do tại sao 'AdjustWindowRect' không thể được sử dụng với' WS_OVERLAPPED'. – zwcloud

Các vấn đề liên quan