·天新网首页·加入收藏·设为首页
首页|笔记本|手机|数码相机|摄像机|MP3/MP4|主板|内存|显示器|办公|打印机|下载|开发|汽车|学院|业界
硬件|台式机|数码|数字家庭|投影仪|GPS/CPU|显卡|硬盘|服务器|网络|一体机|驱动|源码|游戏|考试|报价
您现在的位置:天新网 > 软件开发 > 开发语言 > VC开发
具有背景颜色和文字颜色的只读属性的EDIT控件的实现
http://dev.21tx.com 2005年05月07日

介绍

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

正文

EDIT控件设置只读属性后就不允许用户进行输入和编辑删除等基本操作了,控件只可以用来信息的浏览,但是,如果使用默认的设置函数的话,EDIT控件的背景色将变成灰色,如果你的主题程序的颜色背景进行一致的处理的话,这样可能会与你的整体风格不和,所以需要一个具有背景颜色但是又具有只读属性的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);
}

程序演示界面一:

进行鼠标右键操作错误信息提示:

全文完。

上一篇: 自己动手做按钮
下一篇: 快速排序

英特尔 酷睿(TM)2双核,送指纹识别器一个,再赠两份好礼,请电800-858-2418

Google
 
热点文章
关于我们 | 联系我们 | 广告服务 | 工作机会 | 版权声明 | 欢迎投稿 | 网站地图
Copyright © 2000-2008 , www.21tx.com , All Rights Reserved .
晨新科技 版权所有 Created by TXSite.net