WPF禁用窗口移动

rqcrx0a6  于 2023-05-19  发布在  其他
关注(0)|答案(3)|浏览(326)

在wpf中,我如何防止用户通过拖动标题栏来移动窗口?

wz3gfoph

wz3gfoph1#

由于不能在WPF中直接定义WndProc,因此需要获取HwndSource,并为其添加钩子:

public Window1()
{
    InitializeComponent();

    this.SourceInitialized += Window1_SourceInitialized;
}

private void Window1_SourceInitialized(object sender, EventArgs e)
{
    WindowInteropHelper helper = new WindowInteropHelper(this);
    HwndSource source = HwndSource.FromHwnd(helper.Handle);
    source.AddHook(WndProc);    
}

const int WM_SYSCOMMAND = 0x0112;
const int SC_MOVE = 0xF010;

private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam,  ref bool handled)
{

   switch(msg)
   {
      case WM_SYSCOMMAND:
          int command = wParam.ToInt32() & 0xfff0;
          if (command == SC_MOVE)
          {
             handled = true;
          }
          break;
      default:
          break;
   }
   return IntPtr.Zero;
}
t5zmwmid

t5zmwmid2#

非常古老的线程和其他技术,如UWP和WinUI3,但也许我的建议对其他人有帮助。
我通过设定来达到目标

WindowStyle="None"

在窗口中添加一个按钮并设置

IsCancel="True"

就这样。不需要互操作代码。最小化代码。

axr492tv

axr492tv3#

我知道这是一篇老文章,但…你仍然可以用Alt+space+m -->任何箭头-->鼠标或其他箭头来移动它,这也是我目前试图禁用的。我的应用程序在Kiosk上运行,应该一直保持打开状态。我使用WPF。防止接近很容易,移动...就不那么容易了。

相关问题