single.php

C# WinUI 3アプリでフォームのサイズと位置を取得する手順

C# WinUI 3アプリを作っていく途中で、躓いた部分を備忘録的に投稿します。今回はXamlで作成したフォームのサイズを位置を取得する手順です。

Xamlフォームのサイズ変更イベント

C#で、WinUI 3プロジェクトを作成した場合、初期状態でメインウィンドウはXamlで作成て設定されています。

WinFormsのようにプロパティ画面でイベントを追加できないようなので、サイズ変更時のイベントを、xaml.csファイルに追加していきます。

ウィンドウのコンストラクター部分で次のコードを追加していきます。

private Microsoft.UI.Windowing.AppWindow m_AppWindow;

public MainWindow()
{
  this.InitializeComponent();

  IntPtr hWnd = WinRT.Interop.WindowNative.GetWindowHandle(this);
  Microsoft.UI.WindowId windowId = Microsoft.UI.Win32Interop.GetWindowIdFromWindow(hWnd);
  m_AppWindow = Microsoft.UI.Windowing.AppWindow.GetFromWindowId(windowId);

  m_AppWindow.Changed += Window_Changed;
}

private void Window_Changed(Microsoft.UI.Windowing.AppWindow sender, Microsoft.UI.Windowing.AppWindowChangedEventArgs e)
{
  //サイズ変更時のイベント
}

ウィンドウハンドルからサイズと位置を取得

追加したイベント内で、コンストラクターで取得しておいたウィンドウハンドルから、次のコードでサイズを位置を取得します。

int nWidth = m_AppWindow.Size.Width;
int nHeight = m_AppWindow.Size.Height;
int nTop = m_AppWindow.Position.Y;
int nLeft = m_AppWindow.Position.X;

WinFormアプリであれば、プロパティで簡単に取得できますが、WinUI3アプリの場合は、ほとんど手作業で取得している感があります。

まとめ

今回は、WinUI 3 アプリのウィンドウのサイズと位置を取得する方法を書きました。

WinUI3プロジェクトを作成した場合、ウィンドウ(フォーム)部分はXamlで構築されるためVisualStudioのIDEでは画面を確認しながら作業ができません。

WinFormsの時代とは違って、C++のようにウィンドウハンドルからウィンドウを取得して、プロパティを辿って取得する場合が多い感じがします。

C#のWinUI 3アプリの画面サイズや位置を取得したい場合の参考になれば幸いです。

スポンサーリンク

最後までご覧いただき、ありがとうございます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です