私のメディア プレーヤー アプリケーションでは、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_SETCURSORC# でメッセージを受信するにはどうすればよいですか?