图片背景编辑框的实现
2006-09-02 20:50
253 查看
作者:zhoudb
在VC中,标准的WINDOWS控件如TREEVIEW,EDITBOX,COMBOBOX和LISTBOX等控件都不支持选择背景位图的属性,所以如果要使这些标准控件达到这种效果,必须有些非常规的方法。本文介绍一个CEDIT类如何实现背景位图,并且可以更换背景的例子。可能实现的方法还有其它种,如果有兴趣可以大家探讨。
本文程序运行效果图
下面介绍CMYEDITCTRL类几个关键变量和函数。
第一步在该类中增加几个变量;
第二步 重载部分函数:
各个函数的具体作用:
2.1 OnChange();
如果没有这个函数,你敲几个字符如 ABCDEDFG,然后删除两个FG,但是EDITBOX并未更新。添加这个函数主要是这个原因。
2.2 OnLButtonUp();
也类似,是你鼠标选择时候的刷新问题,如果你有兴趣,可以先把它注释掉,看看BUG是怎么出现的。
2.3 CtlColor(CDC* pDC, UINT nCtlColor)
一般的文字的默认背底是白色的,这儿选择了透明的形式,所以底图可以显示。
2.4 OnEraseBkgnd(CDC* pDC)
主要把选好的背景位图显示出来。
说明:其中代码有些部分简化了,有些部分还可以优化。对于底图的选择,在这里我选择是与我EDITBOX一样大小的底图,如果两者不一样大小,需要修改部分OnEraseBkgnd(CDC* pDC)代码。
基本上这个类的功能就这样实现了。
在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)代码。
基本上这个类的功能就这样实现了。
相关文章推荐
- 如何实现文字加透明背景显示在一张图片的底部的效果
- css实现可扩展的图片背景圆角边框,在IE6,IE7,Firefox下通过测试
- CSS基础实例:CSS实现带背景图片的文字链接的方法
- ajaxfileupload&cropper实现图片上传与在线编辑
- 用Qt实现窗体的无边框、可移动、透明不规则显示(需背景透明的图片)
- 实现图片为背景的不规则窗体
- Jquery刷新页面背景图片随机变换的实现方法
- 利用UIButton背景图片的变化,实现点赞等功能
- ie6下png图片背景不透明的解决办法使用js实现
- 实现gif图片背景真正意义上的透明
- 一个自定义栏的编辑代码:(------- 更改 上传图片为自定义背景图片 -------)
- JQuery实现开关灯及图片的显示,背景变暗
- HTML+CSS----IE6下背景透明实现-css/js--png图片
- 基于jQuery实现仿百度首页换肤背景图片切换代码
- Python实现中文词云(wordcloud),根据背景图片生成词云
- 替换textarea的文本编辑框的实现,可现实文字输入与显示图片、表情
- CSS实现背景图片不规则的导航菜单
- CSS实现背景图片的左右晃动
- android实现图片与背景的圆角
- 不用js实现背景图片的切换