MFC在鼠标悬停在CEdit控件上时更改鼠标光标

时间:2015-07-11 16:23:54

标签: mfc hover cursor cedit custom-cursor

我想将鼠标光标更改为自定义光标,我将其添加到名为IDC_MY_CURSOR的项目资源中。我希望只要鼠标超过CEdit控件,就可以将鼠标指针更改为我的光标。知道怎么做吗?

1 个答案:

答案 0 :(得分: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 );
}