ウィンドウ

ウィンドウの構成要素

非クライアント領域 (non-client area / nonclient area)

   
境界線 (border)  
タイトル バー (title bar)  
アイコン (icon)  
最小化ボタン (Minimize button)、最大化ボタン (Maximize button) または元に戻すボタン (Restore button)  
閉じるボタン (Close button)  
システム メニュー (System menu)  
スクロール バー (scroll bar)  

クライアント領域 (client area)

非クライアント領域を含まない、その内側にあたる領域です。

ウィンドウの作成

CreateWindow

HWND CreateWindow(
  LPCTSTR lpClassName,  // 登録されているクラス名
  LPCTSTR lpWindowName, // ウィンドウ名
  DWORD dwStyle,        // ウィンドウスタイル (Window Stylesで定義されている値の組み合わせ)
  int x,                // ウィンドウの横方向の位置
  int y,                // ウィンドウの縦方向の位置
  int nWidth,           // ウィンドウの幅
  int nHeight,          // ウィンドウの高さ
  HWND hWndParent,      // 親ウィンドウまたはオーナーウィンドウのハンドル
  HMENU hMenu,          // メニューハンドルまたは子ウィンドウ ID
  HINSTANCE hInstance,  // アプリケーションインスタンスのハンドル
  LPVOID lpParam        // ウィンドウ作成データ
  );
CreateWindow 関数 | MSDN CreateWindowW macro | Microsoft Learn

オーバーラップウィンドウのとき、xをCW_USEDEFAULTとすると既定の位置が使用され、yは無視される。

オーバーラップウィンドウのとき、nWidthをCW_USEDEFAULTとすると既定の幅と高さが使用され、nHeightは無視される。

  • 既定の幅 … 初期x座標から画面の右端までの距離
  • 既定の高さ … 初期y座標からアイコン領域の上端までの距離

ウィンドウ ハンドルの取得

GetWindow

HWND GetWindow(
  HWND hWnd,  // 元ウィンドウのハンドル
  UINT uCmd   // 関係
  );
GetWindow 関数 | MSDN

FindWindow

HWND FindWindow(
  LPCTSTR lpClassName,  // クラス名
  LPCTSTR lpWindowName  // ウィンドウ名
);
FindWindow 関数 | MSDN

GetTopWindow

HWND GetTopWindow(
  HWND hWnd   // 親ウィンドウのハンドル
);
GetTopWindow 関数 | MSDN

GetDesktopWindow

HWND GetDesktopWindow(VOID);
GetDesktopWindow 関数 | MSDN

ウィンドウの位置とサイズ

MoveWindow

BOOL MoveWindow(
  HWND hWnd,      // ウィンドウのハンドル
  int X,          // 横方向の位置
  int Y,          // 縦方向の位置
  int nWidth,     // 幅
  int nHeight,    // 高さ
  BOOL bRepaint   // 再描画オプション
);
MoveWindow 関数 | MSDN

SetWindowPlacement

BOOL SetWindowPlacement(
  HWND hWnd,                      // ウィンドウのハンドル
  CONST WINDOWPLACEMENT *lpwndpl  // 位置データ
);
SetWindowPlacement 関数 | MSDN

GetWindowPlacement

BOOL GetWindowPlacement(
  HWND hWnd,                // ウィンドウのハンドル
  WINDOWPLACEMENT *lpwndpl  // 位置データ
);
GetWindowPlacement 関数 | MSDN

SetWindowPos

BOOL WINAPI SetWindowPos(
  _In_     HWND hWnd,            // ウィンドウのハンドル
  _In_opt_ HWND hWndInsertAfter, // Zオーダーの基準となるウィンドウへのハンドル
  _In_     int  X,               //
  _In_     int  Y,               //
  _In_     int  cx,              //
  _In_     int  cy,              //
  _In_     UINT uFlags           //
);
SetWindowPos function (Windows) | MSDN SetWindowPos 関数 | MSDN

コンソール ウィンドウのハンドルの取得

GetConsoleWindow()で、コンソール ウィンドウのハンドルを取得できます。またはGetConsoleTitle()でウィンドウのタイトルを取得し、それをFindWindow()で探すことでも取得できます。SDK32:コンソール ウィンドウのハンドル取得

位置とサイズの変更

SetWindowPos()で、ウィンドウの位置とサイズを変更できます。set console position - C++ Forum

HWND hWnd = GetConsoleWindow();
SetWindowPos(hWnd, HWND_TOPMOST, 100, 100, 300, 300, NULL);

これを実行時に変更するには、システムメニュー (タイトルバー左端のアイコンから表示) でプロパティを選択し、[レイアウト]タブで指定します。

参考

参考書

Microsoft Learnから検索