我想創建一個窗口,其行爲與cmd.exe類似,因爲我不想支持最大化窗口,因爲我只顯示完全可見的文本行(垂直)。我已經提出了兩種解決方案迄今:塊窗口最大化功能? (完全)
解決方案1:
case WM_SYSCOMMAND:
if (wParam == SC_MAXIMIZE) {
return 0;
}
return DefWindowProc(hWnd, message, wParam, lParam);
break;
解決方案2:
case WM_SIZE:
if (wParam == SIZE_MAXIMIZED) {
SendMessage(hWnd, WM_SYSCOMMAND, SC_RESTORE, 0);
return 0;
}
break;
不幸的是,前者是唯一有效的,如果用戶明確地點擊了最大化按鈕標題欄或上下文菜單中。例如,如果用戶只需雙擊標題欄,它就不會阻止它。
後者解決方案的問題在於,它會導致滾動條消失,直到手動調整窗口大小(通過拖動兩側)。另外,你可以在窗口大小恢復之前看到窗口閃爍(我曾嘗試在發送WM_SYSCOMMAND
//SC_RESTORE
之前禁用重新繪製,但不幸的是它沒有多大幫助)。
有沒有更好的解決方案,我錯過了?
爲什麼不從窗口樣式中刪除WS_MAXIMIZEBOX? – kobik
無論如何,你的解決方案#2是一個非常糟糕的主意。 – KonstantinL
除了這點之外,* cmd.exe * **可以被最大化(至少在Windows 10上)。 – IInspectable