CrystalCPUID 5 -Estel- #15

【進捗】 

  • モーダルダイアログ終了処理のバグを修正
  • メニューが複数段になってもクライアント領域を指定サイズに維持する機能を搭載

【メモ】
CrystalDiskMark では、多言語対応を果たしたものの言語によってはメニューが2段になってしまうことがあるよう(対応言語版 OS ではフォントの関係で問題ないのかも?)で困っていました。

色々調べたのですが、メニューの段数を直接取得する方法が見つからず、AdjustWindowRect はメニューが1段の場合にしか対応していないため、以下のように一度ウィンドウサイズを変更してから所望のサイズとの差分を取得し、ウィンドウサイズを再設定するという方法を考えてみました。クライアントサイズが既に所望のサイズの場合は、サイズ変更を行わず return します。

もう少しクールにまとめたいものですが…とりあえずこんな感じ。

void SetClientRect(DWORD sizeX, DWORD sizeY)
{
  RECT rc;
  RECT clientRc;
  rc.left = 0;
  rc.top = 0;
  rc.right = sizeX;
  rc.bottom = sizeY;

  GetClientRect(&clientRc);
  if(clientRc.bottom - clientRc.top == sizeY
  && clientRc.right - clientRc.left == sizeX)
  {
    return;
  }

  AdjustWindowRect(&rc, WS_DLGFRAME, TRUE);
  SetWindowPos(&CWnd::wndTop, -1, -1,
               rc.right - rc.left, rc.bottom - rc.top,
               SWP_NOMOVE);

  GetClientRect(&clientRc);
  if(clientRc.bottom - clientRc.top != sizeY)
  {
    SetWindowPos(&CWnd::wndTop , -1, -1,
      rc.right - rc.left,
      rc.bottom - rc.top + sizeY
      - (clientRc.bottom - clientRc.top),
      SWP_NOMOVE);
  }
}

crystalcpuid5_15.png

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です