我们有一个WinForms应用程序,它可以在一些工业设备上的触摸屏上运行。由于今天无法更改的历史原因,显示的表单具有正常的Windows标题栏。
我们希望通过拖动标题栏来阻止人们使用鼠标(即触摸屏)移动窗口。我们不关心是否有其他方法可以使用键盘移动窗口。
实现这一目标最优雅的方法是什么?如果标题栏上有鼠标按下,我可以想到试图破坏鼠标消息(尽管NC命中测试在Winforms中看起来并不是很明显),我可以想到以某种方式响应Move消息恢复窗口位置。
但这两个看起来都很笨拙,我觉得我错过了一些优雅而明显的东西。
答案 0 :(得分:3)
Nc消息仍然是我想的。 Syncfusion的windows form faq具有您需要的代码。我会粘贴一个链接,但我在没有复制粘贴的iPhone上(发牢骚,发牢骚!)
答案 1 :(得分:2)
好的,感谢DanF的一点鼓励,我想出了这个:
protected override void WndProc(ref Message msg)
{
const int WM_NCLBUTTONDOWN = 0xa1;
switch (msg.Msg)
{
case WM_NCLBUTTONDOWN:
// To prevent people moving the window with the mouse
// unless CTRL is held
if (!(GetKeyState((int)Keys.ControlKey) < 0))
{
return;
}
break;
}
base.WndProc(ref msg);
}
这似乎只是事情。谢谢大家。
答案 2 :(得分:0)
如何修改主窗体事件的LocationChanged,SizeChanged等...
答案 3 :(得分:0)
如果这对您的应用程序很实用,您可以强制窗口保持最大化。
答案 4 :(得分:0)
要处理@ rotard对您的解决方案的评论,您可以使用以下鼠标阻止 移动:在WndProc
覆盖中,对于WM_NCHITTEST
,请致电{{ 1}} 首先。如果它返回base.WndProc
,请返回HTCAPTION
。