處理 `WM_VSCROLL` (垂直滾動) 時調用了 `UpdateWindow(hwnd)`,但 `WM_HSCROLL` (水平滾動) 中未調用,刪除垂直滾動中的 `UpdateWindow` 視覺效果無變化。
這是教程/書本作者的殘留代碼,邏輯上垂直與水平滾動完全對稱,均不需要顯式調用 `UpdateWindow`。
case WM_VSCROLL:
case WM_HSCROLL: {
// ... 計算新位置 si.nPos ...
if (si.nPos != oldPos) {
int dx = (msg == WM_HSCROLL) ? cxChar * (oldPos - si.nPos) : 0;
int dy = (msg == WM_VSCROLL) ? cyChar * (oldPos - si.nPos) : 0;
ScrollWindow(hwnd, dx, dy, NULL, NULL);
// 僅在拖動滾動塊時強制即時重繪
if (LOWORD(wParam) == SB_THUMBTRACK || LOWORD(wParam) == SB_THUMBPOSITION) {
UpdateWindow(hwnd);
}
}
return 0;
}
書本代碼中垂直滾動多出的 `UpdateWindow` 屬於冗餘/殘留,刪除後功能完全正常。實際開發中,根據滾動類型(拖動 vs 點擊)決定是否即時重繪,而非按垂直/水平方向區分。