問題
是否調用 `OnSize` 會自動觸發 `MoveWindow`,而不需額外調用?
正確關係
恰好相反:調用 `MoveWindow` 會觸發 `WM_SIZE` 訊息,進而呼叫 `OnSize` 函數。
- `MoveWindow`:改變視窗位置、大小,發送 `WM_WINDOWPOSCHANGING`、`WM_WINDOWPOSCHANGED`、`WM_MOVE`、`WM_SIZE` 等訊息。
- `OnSize`:`WM_SIZE` 訊息的處理函數,通常在視窗大小改變**後**被呼叫,用於重新佈局子控制項。
實務建議
- 若需在視窗大小改變時調整子控制項,請在 `OnSize` 中編寫佈局代碼。
- 若程式碼主動呼叫 `MoveWindow`/`SetWindowPos` 改變大小,**不必**手動呼叫 `OnSize`,系統會自動觸發。
- 避免在 `OnSize` 中再次呼叫 `MoveWindow`/`SetWindowPos` 導致無限遞迴。