我正在研究一些 OpenGL 介面的東西,并注意到當我啟動我的應用程式時,WM_SIZE 訊息會以寬度 = 1260 和高度 = 677 發送,即使我創建了寬度 = 1280 和高度 = 720 的視窗。
這是我創建視窗的方式:
MainWindow.handle = CreateWindowEx(WS_EX_OVERLAPPEDWINDOW, windowClass.lpszClassName,
"Some window", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 1280, 720,
NULL, NULL, instance, NULL);
這就是我處理 WM_SIZE 的方式:
case WM_SIZE: {
Camera.width = LOWORD(lParam);
Camera.height = HIWORD(lParam);
MainWindow.width = LOWORD(lParam);
MainWindow.height = HIWORD(lParam);
glViewport(0, 0, LOWORD(lParam), HIWORD(lParam));
} break;
我懷疑這些值 (1260, 677) 是錯誤的,而不是實際的視窗尺寸,因為我的界面“命中框”略有偏差。如果我手動調整視窗大小,無論多少,都會發送正確的 WM_SIZE 并且命中框都很好。
我的問題是為什么第一個 WM_SIZE 甚至發送,為什么這些值略有偏差?我可以發送額外的手動 WM_SIZE 來對抗初始 WM_SIZE 嗎?
uj5u.com熱心網友回復:
根據
用于GetWindowRect()獲取整個視窗的位置和尺寸。
否則,如果您希望客戶區具有特定大小,請在呼叫 之前使用AdjustWindowRect()或AdjustWindowRectEx()計算必要的視窗CreateWindowEx()大小,例如:
RECT r;
r.left = 0;
r.top = 0;
r.right = 1280;
r.bottom = 720;
AdjustWindowRectEx(&r, WS_OVERLAPPEDWINDOW, FALSE, WS_EX_OVERLAPPEDWINDOW);
MainWindow.handle = CreateWindowEx(WS_EX_OVERLAPPEDWINDOW, windowClass.lpszClassName,
"Some window", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, r.right-r.left, r.bottom-r.top,
NULL, NULL, instance, NULL);
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/446137.html
