MoveWindow() / SetWindowPos()
↓
發送 WM_WINDOWPOSCHANGING → WM_WINDOWPOSCHANGED
↓
發送 WM_SIZE (wParam: SIZE_RESTORED/MAXIMIZED/MINIMIZED, lParam: 新寬高)
↓
CWnd::OnWndMsg() 分發 → 虛函數 OnSize(UINT nType, int cx, int cy)
GetClientRect 已反映新尺寸。nType 參數區分狀態。// 在目標窗口創建後調用
WNDPROC oldProc = (WNDPROC)SetWindowLong(hWnd, GWL_WNDPROC, (LONG)MyWndProc);
// 自定義窗口過程
LRESULT CALLBACK MyWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {
if (msg == WM_SIZE) {
// 自定義處理:如禁止縮放、記錄尺寸、條件繼傳
if (shouldBlockResize) return 0; // 吞噬消息
}
return CallWindowProc(oldProc, hWnd, msg, wParam, lParam);
}
MFC 封裝:CWnd::SubclassWindow + 重寫 WindowProc 虛函數。