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

2016-01-29 12:03 67 1 收藏

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

【 tulaoshi.com - C语言心得技巧 】

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

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

在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

来源:http://www.tulaoshi.com/n/20160129/1484384.html

延伸阅读
标签: 电脑入门
目前,使用windows系统的用户占多数,很多人还是比较习惯使用windows系统,我们都知道,使用windows系统可以轻松的使用聊天工具进行聊天,那么在Linux系统下要怎么使用qq等聊天工具聊天呢?下面图老师小编就教你Linux系统下如何使用qq等聊天工具。 windows 中可用 QQ、YY、阿里旺旺等多种聊天软件聊天,那么,在 linux 系统中怎样进行聊天呢?...
标签: 电脑入门
在Linux系统中使用man帮助能够使用man命令对系统进行操作,还能查询一些相关文件,那么man帮助有哪些用法呢?下面图老师小编就给大家介绍下Linux使用man帮助的方法。 使用方法: 1. man的查询后面的数字含义: 1用户在shell换机中可以操作的指令或可执行文件 2系统核心可乎叫的函数与工具 3一些常用的函数(function)与函数库(librar...
标签: SQLServer
懒得翻译原文了,一般在视图中使用Order by是无效的,除非使用了Top关键字,那么我们可以用Top 100 percent来欺骗SQL的语法分析器。 USE pubs GO CREATE VIEW AuthorsByName AS SELECT TOP 100 PERCENT * FROM authors ORDER BY au_lname, au_fname GO
标签: word
如何在Word2013中使用声音提示功能   第1步,打开Word2013文档窗口,依次单击文件→选项按钮。 第2步,打开Word选项对话框,切换到高级选项卡。在常规区域选中提供声音反馈复选框,并单击确定按钮。 Word2013怎样使用字符度量单位   第1步,打开Word2013文www.Tulaoshi.com档窗口,依次单击文件→选项按...
标签: Web开发
http://www.cnblogs.com/dahuzizyd/archive/2007/01/04/javascript_Double_click.html 在WebForm上,有的处理需要比较长的时间,为了防止重复提交,就要使用防连击 javaScript代码: function doubleCheck(){     if (window.document.readyState != null &&      &...

经验教程

618

收藏

49
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部