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 バージョンを使用してソフトウェアを構築しています。