1

コンソール アプリケーションが開始され、システムがコンソール ウィンドウを作成する場合、このウィンドウは、その内容の一部が画面の右端からはみ出すような座標で作成されることがあります。次に、ユーザーはマウスを使用してすべてを表示する必要があります。

それに対処する方法は?コンソール ウィンドウの右上隅の座標を検出するために使用する関数は? 次に、画面の外にあるかどうかを確認し、必要な距離だけウィンドウを移動できます。

ウィンドウを移動するには、どの関数を使用しますか? または、ウィンドウが画面の外に移動するのを防ぐためのオールインワンのソリューションがあるのでしょうか?

4

1 に答える 1

1

これは、あなたが説明したことを行う、完全にマルチモニター対応でタスクバー対応の実装です。

#include <Windows.h>

int main()
{
  ClampConsoleToScreen();
  return 0;
}

void ClampConsoleToScreen()
{
  HWND window = GetConsoleWindow();
  RECT windowRect;
  GetWindowRect(window, &windowRect);
  HMONITOR monitor = MonitorFromWindow(window, MONITOR_DEFAULTTOPRIMARY);
  MONITORINFO mi;
  memset(&mi, 0, sizeof(mi));
  mi.cbSize = sizeof(mi);
  GetMonitorInfo(monitor, &mi);

  int adj, any;

  adj = 0;
  any = 0;
  if (windowRect.right > mi.rcWork.right)
  {
    // Get negative adjustment value to move it left onto screen
    adj = mi.rcWork.right - windowRect.right;
  }
  if (windowRect.left < mi.rcWork.left)
  {
    // Get positive adjustment value to move it right onto screen
    adj = mi.rcWork.left - windowRect.left;
  }
  windowRect.left += adj;
  windowRect.right += adj;
  any |= adj;

  adj = 0;
  if (windowRect.bottom > mi.rcWork.bottom)
  {
    // Get negative adjustment value to move it up onto screen
    adj = mi.rcWork.bottom - windowRect.bottom;
  }
  if (windowRect.top < mi.rcWork.top)
  {
    // Get positive adjustment value to move it down onto screen
    adj = mi.rcWork.top - windowRect.top;
  }
  windowRect.top += adj;
  windowRect.bottom += adj;
  any |= adj;

  if (any)
  {
    MoveWindow(window,
      windowRect.left,
      windowRect.top,
      windowRect.right - windowRect.left,
      windowRect.bottom - windowRect.top, TRUE);
  }
}
于 2013-01-05T08:03:14.213 に答える