プログラミングのメモ帳(C/C++/HSP)

日々のプログラミングで気づいた点や小技集を紹介します。(Windows 10/XP/Vista、VC2017、HSP)

画面中央にウインドウを移動

2007年09月26日 18時29分28秒 | ウインドウ関連

デスクトップの画面中央にウインドウを移動するには次の手順で行います。(戻る)

  1. デスクトップ画面全体のサイズを取得(SystemParametersInfo)
  2. 移動するウインドウのサイズを取得(GetWindowRect)
  3. 移動するウインドウの座標位置を計算(画面中央)
  4. 計算した座標にウインドウを移動(SetWindowPos)

プロトタイプ宣言

BOOL SystemParametersInfo(
    UINT    uiAction,           // 取得または設定するべきシステムパラメータ
    UINT    uiParam,            // 実施するべき操作によって異なる
    PVOID   pvParam,            // 実施するべき操作によって異なる
    UINT    fWinIni             // ユーザープロファイルの更新オプション
);

BOOL GetWindowRect(
    HWND    hWnd,               // ウインドウのハンドル
    LPRECT  lpRect              // ウインドウの座標値
);

BOOL SetWindowPos(
    HWND    hWnd,               // ウインドウのハンドル
    HWND    hWndInsertAfter,    // 配置順序のハンドル
    int     X,                  // 横方向の位置
    int     Y,                  // 縦方向の位置
    int     cx,                 // 幅
    int     cy,                 // 高さ
    UINT    uFlags              // ウインドウ位置のオプション
);

構造体

typedef struct _RECT {
    LONG    left;       // 左上隅のX座標
    LONG    top;        // 左上隅のY座標
    LONG    right;      // 右下隅のX座標
    LONG    bottom;     // 右下隅のY座標
} RECT, *LPRECT;

サンプル

// ワークエリア領域の取得
#define GetMonitorRect(rc)  SystemParametersInfo(SPI_GETWORKAREA,0,rc,0)

// デスクトップの画面中央に移動
BOOL DesktopCenterWindow( HWND hWnd )
{
    RECT    rc1;        // デスクトップ領域
    RECT    rc2;        // ウインドウ領域
    INT     cx, cy;     // ウインドウ位置
    INT     sx, sy;     // ウインドウサイズ
    
    // サイズの取得
    GetMonitorRect(      &rc1 );                            // デスクトップのサイズ
    GetWindowRect( hWnd, &rc2 );                            // ウインドウのサイズ
    // いろいろと計算
    sx = (rc2.right - rc2.left);                            // ウインドウの横幅
    sy = (rc2.bottom - rc2.top);                            // ウインドウの高さ
    cx = (((rc1.right - rc1.left) - sx) / 2 + rc1.left);    // 横方向の中央座標軸
    cy = (((rc1.bottom - rc1.top) - sy) / 2 + rc1.top);     // 縦方向の中央座標軸
    // 画面中央に移動
    return SetWindowPos( hWnd, NULL, cx, cy, 0, 0, (SWP_NOSIZE|SWP_NOZORDER|SWP_NOOWNERZORDER) );
}
  • hWnd が対象のウインドウ・ハンドルです。

関連記事



コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« ウインドウ・スタイルの動的変更 | トップ | 画面隅にウインドウを移動 »
最新の画像もっと見る

コメントを投稿

ウインドウ関連」カテゴリの最新記事