我在从 C# winform 调用 Windows 8 上的 DefWindowsProc 时遇到问题。我有这个表格,我需要它可以从表格内的任何地方拖动。
这是我的代码。
[DllImport("user32.dll")]
static extern IntPtr DefWindowProc(IntPtr hWnd, uint uMsg, UIntPtr wParam, IntPtr lParam);
[DllImport("user32.dll")]
static extern bool ReleaseCapture(IntPtr hwnd);
const uint WM_SYSCOMMAND = 0x112;
const uint MOUSE_MOVE = 0xF012;
public void Drag()
{
DefWindowProc(this.Handle, WM_SYSCOMMAND, (UIntPtr)MOUSE_MOVE, IntPtr.Zero);
}
private void OnMainPanelMouseDown(object sender, MouseEventArgs e)
{
Control ctrl = sender as Control;
ReleaseCapture(ctrl.Handle);
this.Drag(); // put the form into drag mode.
}
DefWindowProc 总是返回 0 但我无法拖动我的窗口。此调用适用于 XP、Vista 和 7,但不适用于 8。我猜这与在 Windows 8 上无法正常运行的 DefWindowProc 的声明有关。
请注意,在 Windows 8 上,我使用 .NET 4.0 框架构建应用程序,而在其他平台上,我使用 2.0 版本构建软件。