好贷网好贷款

图片背景编辑框的实现

发布时间:2016-12-5 18:40:22 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"图片背景编辑框的实现",主要涉及到图片背景编辑框的实现方面的内容,对于图片背景编辑框的实现感兴趣的同学可以参考一下。

作者:zhoudb 在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)代码。基本上这个类的功能就这样实现了。 

上一篇:修改Linux Fedora 3 的root密码
下一篇:常见的蔬菜

相关文章

相关评论