私のメディア プレーヤー アプリケーションでは、SetCursor(NULL)
Windows がカーソルの状態をリセットしないようにするために、 を使用してカーソルを非表示WM_SETCURSOR
にし、WndProc
メソッドで処理しました。
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case WM.SETCURSOR:
base.WndProc(ref m);
int lowWord = (m.LParam.ToInt32() << 16) >> 16;
if (lowWord == HTCLIENT && FullScreen)
{
SetCursor(IntPtr.Zero); // hides cursor
m.Result = (IntPtr)1; // return TRUE; equivalent in C++
}
return;
}
}
ただし、カーソルがクライアント領域 (aka LOWORD(lParam) == HTCLIENT
) にWM_SETCURSOR
ある場合、 では決してトリガーされませんWndProc
。WM_SETCURSOR
したがって、カーソルがクライアント領域にあるときにメッセージを実際に取得することはなく、 LOWORD(lParam) != HTCLIENT
.
WM_SETCURSOR
ただし、Spy++ では、アプリケーションがおよびWM_MOUSEMOVE
メッセージを受信したことを明確に示しています。
メッセージはどこで紛失/処理されますか? WM_SETCURSOR
C# でメッセージを受信するにはどうすればよいですか?