カーソルをアクティブウィンドウのクライアント領域に制限する
カーソルをアクティブウィンドウのクライアント領域に制限するには、Win32 APIの ClipCursor 関数を使うのですが、なかなか期待する動作をしてくれません。
多くのサイトでは、ウィンドウのアクティブ/非アクティブ状態をWM_ACTIVATEで検出し、クリッピングの開始と終了を行えばよい、と解説されています。しかしこの方法だけだと、ウィンドウを非アクティブな状態から「タイトルバーをクリックして」アクティブ状態にした場合、カーソルがデスクトップ全体を移動できる状態になってしまいます。
きちんと調べたわけではないのですが、どうもWM_ENTERSIZEMOVE~WM_EXITSIZEMOVEの間で勝手にClipCursorの設定が無効化されているようです。
ということで、WM_EXITSIZEMOVEの中でもClipCursorします。これにより、ウィンドウの移動を終えた後に、カーソルをクライアント領域にクリッピングできるようになります。