2017-04-13 74 views
2

我想創建一個窗口,其行爲與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之前禁用重新繪製,但不幸的是它沒有多大幫助)。

有沒有更好的解決方案,我錯過了?

+2

爲什麼不從窗口樣式中刪除WS_MAXIMIZEBOX? – kobik

+1

無論如何,你的解決方案#2是一個非常糟糕的主意。 – KonstantinL

+2

除了這點之外,* cmd.exe * **可以被最大化(至少在Windows 10上)。 – IInspectable

回答

3
case WM_SYSCOMMAND: 
    UINT SysCommandCode = wParam & 0xFFF0; 
    if (SysCommandCode == SC_MAXIMIZE) { 
     return 0; 
    } 
    return DefWindowProc(hWnd, message, wParam, lParam); 
    break; 

此外,建議從窗口樣式(創建時)中刪除WS_MAXIMIZEBOX。

+0

完全忽略了WS_MAXIMIZEBOX風格。那就是訣竅。謝謝! – user966939