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

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

画面隅にウインドウを移動

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

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

  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 DesktopCornerWindow( HWND hWnd, INT nCorner )
{
    RECT    rc1;        // デスクトップ領域
    RECT    rc2;        // ウインドウ領域
    INT     cx, cy;     // ウインドウ始点位置
    INT     ex, ey;     // ウインドウ終点位置
    INT     sx, sy;     // ウインドウサイズ
    
    // サイズの取得
    GetMonitorRect(      &rc1 );                            // デスクトップのサイズ
    GetWindowRect( hWnd, &rc2 );                            // ウインドウのサイズ
    // いろいろと計算
    sx = (rc2.right - rc2.left);                            // ウインドウの横幅
    sy = (rc2.bottom - rc2.top);                            // ウインドウの高さ
    cx = (rc1.left);                                        // 始点位置の横方向
    cy = (rc1.top);                                         // 始点位置の縦方向
    ex = (((rc1.right - rc1.left) - sx) + rc1.left);        // 終点位置の横方向
    ey = (((rc1.bottom - rc1.top) - sy) + rc1.top);         // 終点位置の縦方向
    // 画面隅に移動
    switch ( nCorner ){
        case 7: cx = cx; cy = cy; break;                    // 左上隅に移動
        case 9: cx = ex; cy = cy; break;                    // 右上隅に移動
        case 1: cx = cx; cy = ey; break;                    // 左下隅に移動
        case 3: cx = ex; cy = ey; break;                    // 右下隅に移動
        default:return FALSE;                               // 移動しない
    }
    return SetWindowPos( hWnd, NULL, cx, cy, 0, 0, (SWP_NOSIZE|SWP_NOZORDER|SWP_NOOWNERZORDER) );
}
  • hWnd が対象のウインドウ・ハンドルです。

関連記事



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

コメントを投稿

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