vc具有背景颜色和文字颜色的只读属性的EDIT控件的实现

本文介绍如何创建一个自定义的只读编辑控件,该控件支持背景颜色和字体颜色的设置,并能屏蔽键盘输入及鼠标右键菜单操作。
 实现的方法其实很简单,派生一个CEDIT类,我们这里命名为CColReadOnlyEdit,再这个类中我们首先触发PreTranslateMessage,
这个函数可以用来截获消息编程.我们如果要进行EDIT控件的属性设置,我们可以再这里进行截获WM_KEYDOWN消息,具体编程可以见下:
BOOL CColReadOnlyEdit::PreTranslateMessage(MSG* pMsg)
{

    // TODO: Add your specialized code here and/or call the base class
    if(pMsg->message == WM_KEYDOWN)
    {
        if(bReadOnly)
            return TRUE;//在这里进行屏蔽并返回
    }
    return CEdit::PreTranslateMessage(pMsg);
}


现在屏蔽键盘的功能我们实现了,接下来的就是编写一个具有背景颜色和字体颜色的窗体了.其实这个也非常简单,
我们只需要触发WM_PAITN消息,然后进行窗体控件的背景重绘和字体重新输出就可以了.
void CColReadOnlyEdit::OnPaint()
{

    CPaintDC dc(this); // device context for painting

    // TODO: Add your message handler code here
    GetWindowText(m_Text);
    // Delete the old brush
    m_Brush.DeleteObject();
    m_Brush.CreateSolidBrush(m_BackColor);
    CDC* pDC = GetDC();
    pDC->SetBkMode(OPAQUE);
    pDC->SetBkColor(m_BackColor);
    pDC->SelectObject(&m_Brush);
    CRect rc;
    GetClientRect(&rc);
    ScreenToClient(&rc);
    pDC->Rectangle(0, 0, rc.Width(), rc.Height());
    pDC->SetTextColor(m_TextColor);
    pDC->TextOut(2, 2, m_Text.GetBuffer(m_Text.GetLength()));
    // Do not call CEdit::OnPaint() for painting messages
}

最后还有一个重要的一点就是屏蔽鼠标在EDIT控件上的右键操作,因为你虽然象上面实现了操作,但是如果使用鼠标右键菜单
粘贴也是可以的(键盘粘贴被屏蔽),这里的方法有很多,比如触发WM_RBUTTONDOWN消息进行处理可以,同时我们可以在PreTranslateMessage中
进行截获处理,也可以处理EN_CHANGE消息,这里进行最简单的,触发WM_RBUTTONDOWN消息,直接进行返回就可以了,相关代码见下:
void CColReadOnlyEdit::OnRButtonDown(UINT nFlags, CPoint point)
{

    // TODO: Add your message handler code here and/or call default
    if(bReadOnly)
    {
        ::AfxMessageBox("设置成为只读模式,右键菜单屏蔽!");
        return;
    }
    else
        CEdit::OnRButtonDown(nFlags, point);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值