【C++】親ウィンドウの真ん中に子ウィンドウを表示する方法

この記事は約2分で読めます。

検索時のダイアログの表示位置ですが、色々なエディタを見ていると結構バラバラですね。エディタの真ん中に表示するもの、エディタの左上基準で表示するもの、ディスプレイの真ん中に表示するものなどなど様々です。そして、表示したダイアログを移動したりすると次回の表示からはその位置に初期表示したりします。

自作エディタでは毎回ディスプレイの真ん中に表示するようにしていましたが、エディタの真ん中に表示した方が使い勝手が良さそうなので他のエディタに倣って真ん中に表示することにしました。

親ウィンドウの真ん中に子ウィンドウを表示する方法

親ウィンドウと子ウィンドウのサイズから表示位置を計算します。parentHWnd は親ウィンドウのハンドル、childHWnd は子ウィンドウのハンドルを設定します。

RECT parentRect, childRect;
INT cx, cy;
INT sx, sy;

// 親ウィンドウのサイズ
GetWindowRect(parentHWnd, &parentRect);

// 子ウィンドウのサイズ
GetWindowRect(childHWnd, &childRect);

// 表示座標計算
sx = childRect.right - childRect.left;
sy = childRect.bottom - childRect.top;
cx = ((parentRect.right - parentRect.left - sx) / 2 + parentRect.left);
cy = ((parentRect.bottom - parentRect.top - sy) / 2 + parentRect.top);

// 親画面の中央に移動
SetWindowPos(childHWnd, NULL, cx, cy, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOOWNERZORDER);

おわりに

こんな感じに親ウィンドウのエディタの中央に表示されます。仮に子ウィンドウより親ウィンドウが小さくなっても親ウィンドウの真ん中に表示されます。

コメント

タイトルとURLをコピーしました