none
Window位置の固定 RRS feed

  • 質問

  • 初歩的質問であれば、申し訳ありません。

    WPFでアプリケーションを作成しているのですが、最初にWindowを表示した位置からWindowの位置を変更させたくないのですが、

    どのようにすれば表示位置を固定できますでしょうか。

    以上、よろしくお願い致します。

    2015年7月30日 5:14

回答

  • こんにちは。

    移動禁止にしたいという意味でしたか?それとも初期表示位置を指定したいという意味でしたか。

    初期表示位置については調べたらたくさん見つかりました。

    移動禁止であれば、WinFormみたいにWindowメッセージで移動系を補足してやってみてはどうでしょう。

    参考:http://jeanne.wankuma.com/tips/csharp/form/moveable.html

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
    
        const int WM_SYSCOMMAND = 0x0112;
        const int SC_MOVE = 0xF010;
        const int SC_MASK = 0xFFF0;
    
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            HwndSource source = HwndSource.FromHwnd(new WindowInteropHelper(this).Handle);
            source.AddHook(new HwndSourceHook(WndProc));
        }
    
        private static IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
        {
            if ((msg == WM_SYSCOMMAND) && ((wParam.ToInt32() & SC_MASK) == SC_MOVE))
            {
                handled = true;
            }
            return IntPtr.Zero;
        }
    }


    2015年7月30日 5:38
    モデレータ

すべての返信

  • こんにちは。

    移動禁止にしたいという意味でしたか?それとも初期表示位置を指定したいという意味でしたか。

    初期表示位置については調べたらたくさん見つかりました。

    移動禁止であれば、WinFormみたいにWindowメッセージで移動系を補足してやってみてはどうでしょう。

    参考:http://jeanne.wankuma.com/tips/csharp/form/moveable.html

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
    
        const int WM_SYSCOMMAND = 0x0112;
        const int SC_MOVE = 0xF010;
        const int SC_MASK = 0xFFF0;
    
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            HwndSource source = HwndSource.FromHwnd(new WindowInteropHelper(this).Handle);
            source.AddHook(new HwndSourceHook(WndProc));
        }
    
        private static IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
        {
            if ((msg == WM_SYSCOMMAND) && ((wParam.ToInt32() & SC_MASK) == SC_MOVE))
            {
                handled = true;
            }
            return IntPtr.Zero;
        }
    }


    2015年7月30日 5:38
    モデレータ
  • Tak1wa様

    丁寧な回答頂きありがとうございました。

    自分の想定していた動きを実現することができました。

    ありがとうございました。

    2015年7月31日 7:44