vc具有背景颜色和文字颜色的只读属性的EDIT控件的实现
2008-11-25 19:14
711 查看
实现的方法其实很简单,派生一个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);
}
这个函数可以用来截获消息编程.我们如果要进行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);
}
![](http://cnc.imgcache.qq.com/ac/b.gif)
相关文章推荐
- 具有背景颜色和文字颜色的只读属性的EDIT控件的实现
- mfc edit控件只读属性与背景颜色问题小发现
- 孙鑫VC学习笔记:第十讲画图 改变对话框及控件的文字/背景颜色
- android在代码中四种设置控件(以及TextView的文字颜色)背景颜色的方法
- VC中实现带有背景位图的树型控件
- 关于cell点击之后变换背景文字的颜色的cell.selectedTextColor这个属性可以用的
- VC++改变窗口背景颜色和使得Static控件背景透明
- android shape实现控件圆角,背景,边框等属性
- VC++ 中如何更改Tree Control控件中节点的背景色和节点文字的颜色
- css3 RGBA颜色实现背景颜色透明而文字不透明
- VC 对话框背景颜色、控件颜色
- VC++实现按钮控件的底色、字体、颜色。亲测可用
- Edit控件中字体、颜色、的局部改变及背景的改变
- VC 对话框背景颜色、控件颜色
- [转载]VC对话框背景颜色、控件颜色
- android的EditText控件实现只读
- VC中Rich Edit控件实现打印信息显示为指定颜色
- VC ++实现 对文件的 隐藏, 只读 ,创建时间 , 最后修改时间 ,最后访问时间 属性的修改
- 颜色控件【MFC】自己写一个ListCtrl控件(实现栅格属性表的编辑)-java教程
- MFC EDIT控件中改变背景色和文字颜色