0

マウス カーソルを IDC_MY_CURSOR という名前のプロジェクト リソースに追加したカスタム カーソルに変更したいと考えています。マウスが CEdit コントロールのみの上にあるときはいつでも、マウス ポインターをカーソルに変更したいと考えています。それを行う方法はありますか?

4

1 に答える 1

4

標準コントロールの既定の動作をオーバーライドするには、独自の実装を提供する必要があります。MFC を使用してこれを行う最も簡単な方法は、標準コントロールの実装 (この場合はCEdit ) から派生させることです。

CustomEdit.h:

class CCustomEdit : public CEdit {
public:
    CCustomEdit() {}
    virtual ~CCustomEdit() {}

protected:
    DECLARE_MESSAGE_MAP()

public:
    // Custom message handler for WM_SETCURSOR
    afx_msg BOOL OnSetCursor( CWnd* pWnd, UINT nHitTest, UINT message );
};

CustomEdit.cpp:

#include "CustomEdit.h"

BEGIN_MESSAGE_MAP( CCustomEdit, CEdit )
    ON_WM_SETCURSOR()
END_MESSAGE_MAP()

BOOL CCustomEdit::OnSetCursor( CWnd* pWnd, UINT nHitTest, UINT message ) {
    ::SetCursor( AfxGetApp()->LoadCursor( IDC_MY_CURSOR ) );
    // Stop processing
    return TRUE;
}

このクラスを使用して、CCustomEditコントロールを動的に作成できます。または、標準のエディット コントロールを (動的に、またはリソース スクリプトを介して) 作成し、それに のインスタンスをアタッチすることもできますCCustomEdit( DDX_Controlを参照)。

void CMyDialog::DoDataExchange( CDataExchange* pDX ) {
    DDX_Control( pDX, IDC_CUSTOM_EDIT, m_CustomEdit );
    CDialogEx::DoDataExchange( pDX );
}
于 2015-07-11T17:14:13.120 に答える