2017-04-13 4 views
2

cmd.exeと似たような動作をするウィンドウを作成しようとしています。つまり、完全に見えるテキスト行(垂直方向)のみを表示するので、ウィンドウを最大化する必要はありません。ブロックウィンドウは機能を最大化しますか? (完全に)

解決方法1::私はこれまでの2つのソリューションが出ている

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

また、ウィンドウスタイル(作成時)からWS_MAXIMIZEBOXを削除することをお勧めします。

+0

WS_MAXIMIZEBOXスタイルを完全に見落としました。それがトリックでした。ありがとう! – user966939

関連する問題