ウィンドウを画面の中央に配置する

ウィンドウモードでゲームを起動させる際に、ウィンドウを画面の中央に配置させたいというのは自然と沸いてくる願望だ。これを実現させるためには、まず GetDesktopWindow()関数でデスクトップのウィンドウハンドルを取得し、そのデスクトップのウィンドウハンドルを使って、GetWindowRect()関数でデスクトップ領域を取得。そして、表示させたいウィンドウの領域もGetWindowRect()で取得する。それらの領域情報からウィンドウをどこに置けば中央になるかを計算する。そして最後にSetWindowPos()関数でウィンドウの位置をセットすればOKだ。これを実現させる関数を一度作れば、再利用しやすくなる。以下に例としてSetWinCenter()を用意する。


// ウィンドウの位置を中央に移動させる
int SetWinCenter(HWND hWnd)
{
  HWND hDeskWnd;
  RECT deskrc, rc;
  int x, y;

  // デスクトップのウィンドウハンドルを取得
  hDeskWnd = GetDesktopWindow();

  // デスクトップの領域を取得
  GetWindowRect(hDeskWnd, (LPRECT)&deskrc);

  // ウィンドウの領域を取得
  GetWindowRect(hWnd, (LPRECT)&rc);

  // ウィンドウの表示位置を計算
  x = (deskrc.right - (rc.right-rc.left)) / 2;
  y = (deskrc.bottom - (rc.bottom-rc.top)) / 2;

  // ウィンドウの位置を変更する
  SetWindowPos(
    hWnd, HWND_TOP,
    x, y,
    (rc.right-rc.left), (rc.bottom-rc.top),
    SWP_SHOWWINDOW
  );

  return 0;
}


この関数に、表示させたいウィンドウのハンドルを渡してやればウィンドウは中央に配置される。