MFC中如何隐藏RichEdit控件的光标

问题描述

  最近想用RichEdit控件模拟静态文本控件的效果,在把RichEdit控件设置为只读模式后,发现点击RichEdit控件的文本会出现光标,如下图所示。
RichEdit带光标

解决方法

  通过继承CRichEditCtrl来重写WM_LBUTTONDOWN和EN_MSGFILTER消息的处理函数可以解决这一问题,代码如下。
MyRichEditCtrl.h

#pragma once


// CMyRichEditCtrl

class CMyRichEditCtrl : public CRichEditCtrl
{
    DECLARE_DYNAMIC(CMyRichEditCtrl)

public:
    CMyRichEditCtrl();
    virtual ~CMyRichEditCtrl();

protected:
    afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
    afx_msg void OnEnMsgfilter(NMHDR *pNMHDR, LRESULT *pResult);

    DECLARE_MESSAGE_MAP()
};

MyRichEditCtrl.cpp

// MyRichEditCtrl.cpp : 实现文件
//

#include "stdafx.h"
#include "Test.h"
#include "MyRichEditCtrl.h"


// CMyRichEditCtrl

IMPLEMENT_DYNAMIC(CMyRichEditCtrl, CRichEditCtrl)

CMyRichEditCtrl::CMyRichEditCtrl()
{

}

CMyRichEditCtrl::~CMyRichEditCtrl()
{
}


BEGIN_MESSAGE_MAP(CMyRichEditCtrl, CRichEditCtrl)
    ON_WM_LBUTTONDOWN()
    ON_NOTIFY_REFLECT(EN_MSGFILTER, OnEnMsgfilter)
END_MESSAGE_MAP()



// CMyRichEditCtrl 消息处理程序


void CMyRichEditCtrl::OnLButtonDown(UINT nFlags, CPoint point)
{
    // TODO: 在此添加消息处理程序代码和/或调用默认值
    CRichEditCtrl::OnLButtonDown(nFlags, point);
    HideCaret();
}

void CMyRichEditCtrl::OnEnMsgfilter(NMHDR *pNMHDR, LRESULT *pResult)
{
    MSGFILTER *pMsgFilter = reinterpret_cast<MSGFILTER *>(pNMHDR);
    // TODO:  控件将不发送此通知,除非您重写
    // CRichEditCtrl::OnInitDialog() 函数,以将 EM_SETEVENTMASK 消息发送
    // 到该控件,同时将 ENM_KEYEVENTS 或 ENM_MOUSEEVENTS 标志
    // “或”运算到 lParam 掩码中。

    // TODO:  在此添加控件通知处理程序代码
    HideCaret();

    *pResult = 0;
}

  主对话框中创建控件的代码如下。

// 初始化RichEdit控件
CRect rcRichEdit(20, 20, 200, 200);
DWORD dwStyle = WS_CHILD | WS_VISIBLE | WS_TABSTOP | ES_MULTILINE;
m_wndRichEdit.Create(dwStyle, rcRichEdit, this, IDC_MYRICHEDIT);
m_font.CreatePointFont(100, _T("Microsoft YaHei"));
m_wndRichEdit.SetFont(&m_font);
m_wndRichEdit.SetReadOnly(TRUE);
m_wndRichEdit.SetWindowText(_T("示例文本示例文本示例文本示例文本示例文本"));
long mask = m_wndRichEdit.GetEventMask();
mask |= ENM_KEYEVENTS | ENM_MOUSEEVENTS;
m_wndRichEdit.SetEventMask(mask);

  重新执行程序,在控件文字上点击鼠标就不会出现光标了。
RichEdit不带光标

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值