| 网站首页 | JAVA文章 | AppServers | Web开发 | 应用开发 | 资源下载 | 论坛
    想学好编程,学好外语很重要  [enadd  2006年12月25日]        
设为首页 加入收藏 联系站长
您现在的位置: 编程笔记网 >> 应用开发 >> vc >> vc控件 >> 文章正文
具有背景颜色和文字颜色的只读属性的EDIT控件的实现        【字体:
具有背景颜色和文字颜色的只读属性的EDIT控件的实现
作者:-    文章来源:-    点击数:    更新时间:2006-4-20

下载本文所附源代码


介绍
你是否为你的ED99v控件设置成为只读属性那个灰色的背景色不合你的程序整体布局而烦恼了,其实实现这个方法不难,下面就是这个的实现方法,代码可以任意拷贝和使用

正文
ED99v控件设置只读属性后就不允许用户进行输入和编辑删除等基本操作了,控件只可以用来信息的浏览,但是,如果使用默认的设置函数的话,ED99v控件的背景色将变成灰色,如果你的主题程序的颜色背景进行一致的处理的话,这样可能会与你的整体风格不和,所以需要一个具有背景颜色但是又具有只读属性的ED99v控件刻不容缓了.
    实现的方法其实很简单,派生一个CED99v类,我们这里命名为CColReadOnlyEdit,再这个类中我们首先触发PreTranslateMessage,这个函数可以用来截获消息编程.我们如果要进行ED99v控件的属性设置,我们可以再这里进行截获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_PA99vN消息,然后进行窗体控件的背景重绘和字体重新输出就可以了.
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
}

    最后还有一个重要的一点就是屏蔽鼠标在ED99v控件上的右键操作,因为你虽然象上面实现了操作,但是如果使用鼠标右键菜单粘贴也是可以的(键盘粘贴被屏蔽),这里的方法有很多,比如触发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);
}

程序演示界面一:

[1] [2] 下一页  

文章录入:enadd    责任编辑:enadd 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
  • VC控件 TreeCtrl 与 ListCtr…

  • CListCtrl 使用演示的例子

  • VC通用控件编程之CList控件

  • VC++在应用程序中使用标准窗…

  • 用ATL和MFC来创建ActiveX控件

  • 动态控件的生成与响应

  • 可设置颜色的静态控件、单选…

  • 支持数据项查找功能的树控制…

  • VC通用控件编程之CImageList…

  • 做一个可编辑的表格控件

  •   网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 管理登录 |