如何在EDITBOX控件中使用背景位图

八零兴伟

八零兴伟

2016-01-29 12:03

如何在EDITBOX控件中使用背景位图,如何在EDITBOX控件中使用背景位图

如何在EDITBOX控件中使用背景位图
作者:zhoudb

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/cyuyanjiaocheng/) 下载本文源代码

在VC中,标准的WINDOWS控件如TREEVIEW,EDITBOX,COMBOBOX和LISTBOX等控件都不支持选择背景位图的属性,所以如果要使这些标准控件达到这种效果,必须有些非常规的方法。本文介绍一个CEDIT类如何实现背景位图,并且可以更换背景的例子。可能实现的方法还有其它种,如果有兴趣可以大家探讨。


本文程序运行效果图

下面介绍CMYEDITCTRL类几个关键变量和函数。

第一步在该类中增加几个变量;
public:CBitmap m_bmp;protected:CBrush m_brHollow;CBitmap *m_pbmCurrent;
第二步 重载部分函数:
afx_msg HBRUSH CtlColor(CDC* pDC, UINT nCtlColor);afx_msg void OnLButtonUp(UINT nFlags, CPoint point);afx_msg void OnChange();afx_msg BOOL OnEraseBkgnd(CDC* pDC);
各个函数的具体作用:

2.1 OnChange();
如果没有这个函数,你敲几个字符如 ABCDEDFG,然后删除两个FG,但是EDITBOX并未更新。添加这个函数主要是这个原因。
void CMyEditCtrl::OnChange() {Invalidate(); ///强制进行更新}
2.2 OnLButtonUp();
也类似,是你鼠标选择时候的刷新问题,如果你有兴趣,可以先把它注释掉,看看BUG是怎么出现的。
void CMyEditCtrl::OnLButtonUp(UINT nFlags, CPoint point) {Invalidate(); ///强制进行更新CEdit::OnLButtonUp(nFlags, point);}
2.3 CtlColor(CDC* pDC, UINT nCtlColor)
一般的文字的默认背底是白色的,这儿选择了透明的形式,所以底图可以显示。
HBRUSH CMyEditCtrl::CtlColor(CDC* pDC, UINT nCtlColor) {pDC->SetBkMode(TRANSPARENT); ///选择透明背景模式pDC->SetTextColor(RGB(0xff,0xff,0xff)); ///设置文字颜色为白色return m_brHollow;}
2.4 OnEraseBkgnd(CDC* pDC)
主要把选好的背景位图显示出来。
BOOL CMyEditCtrl::OnEraseBkgnd(CDC* pDC) {BITMAP bm;m_bmp.GetBitmap(&bm);m_pbmCurrent = &m_bmp;CDC dcMem;dcMem.CreateCompatibleDC(pDC);CBitmap* pOldBitmap = dcMem.SelectObject(m_pbmCurrent);  ///选择位图pDC->BitBlt(0,0,bm.bmWidth,bm.bmHeight,&dcMem,0,0,SRCCOPY);  ///画出位图dcMem.SelectObject(pOldBitmap);    return TRUE; }
说明:其中代码有些部分简化了,有些部分还可以优化。对于底图的选择,在这里我选择是与我EDITBOX一样大小的底图,如果两者不一样大小,需要修改部分OnEraseBkgnd(CDC* pDC)代码。
基本上这个类的功能就这样实现了。
如果有兴趣和我一起探讨这个问题,可以发信到zdibin2000@sohu.com
展开更多 50%)
分享

猜你喜欢

如何在EDITBOX控件中使用背景位图

C语言教程 C语言函数
如何在EDITBOX控件中使用背景位图

如何在树型控件中使用背景位图

C语言教程 C语言函数
如何在树型控件中使用背景位图

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

如何在ListBox中选择背景位图

C语言教程 C语言函数
如何在ListBox中选择背景位图

如何在严寒中使用相机

拍照 摄影
如何在严寒中使用相机

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

如何在ASP中使用类

ASP
如何在ASP中使用类

如何在BCB中使用DirectX

编程语言 网络编程
如何在BCB中使用DirectX

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

网页经典代码(二)

网页经典代码(二)

JAVA及相关字符集编码问题研究

JAVA及相关字符集编码问题研究
下拉加载更多内容 ↓