Last Updated 2004/09/30
Programming Tips Visual C++ MFC マウス  索 引 
マウスカーソル変更
2004/09/30

クライアント領域でマウスカーソルを変更する場合,WM_MOUSEMOVE ハンドラで変更すると,一瞬で戻ってしまう.
標準のカーソルを変更するとうまくいく.

::SetClassWord( m_hWnd, GCW_HCURSOR, (WORD)::LoadCursor(NULL, IDC_IBEAM) );


この場合,クライアント領域以外では元に戻す操作が必要となる.

WM_MOUSEMOVE で標準のカーソルに戻ってしまうのは,マウスが移動された時に Windows がウィンドウクラスで定義されたカーソル( WNDCLASS の hCursor )
に自動的に復帰させているからである.

hCursor
Handle to the class cursor. This member must be a handle to a cursor resource. If this member is NULL, an application must explicitly set the cursor shape whenever the mouse moves into the application's window.


ある状態の時にカーソルを変更するには,WM_SETCURSOR に対応する.
マウスカーソルを砂時計と矢印にするには IDC_APPSTARTING を使用する.

CMyWnd::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
    if( nHitTest == HTCLIENT && ある状態 ) {
        SetCursor( IDC_APPSTARTING など );
        return TRUE;
    }
    return CWnd::OnSetCursor(pWnd, nHitTest, message);
}


参照
自作のマウスカーソル表示
前後のTips
マウスカーソル変更

DSS ProgrammingTipsCGI Ver2.02