mfc中各种控件透明的实现方法总结

mfc中各种控件透明的实现方法总结

ID:35294708

大小:79.00 KB

页数:5页

时间:2019-03-23

mfc中各种控件透明的实现方法总结_第1页
mfc中各种控件透明的实现方法总结_第2页
mfc中各种控件透明的实现方法总结_第3页
mfc中各种控件透明的实现方法总结_第4页
mfc中各种控件透明的实现方法总结_第5页
资源描述:

《mfc中各种控件透明的实现方法总结》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、2010-04-07MFC中各种控件透明的实现方法总结文章分类:C++编程MFC中各种控件透明的实现方法总结Button:资料来源:http://www.cnblogs.com/songsu/articles/1370665.html关键是其中的OnEraseBkgnd。OnDrawItem只是在原来BUTTON的位置上画了一个椭圆显示BUTTON的位置。/* *   画项 */voidCImageButton::OnDrawItem(intnIDCtl,LPDRAWITEMSTRUCTlpDrawItemS

2、truct) {   CDC*pDC=CDC::FromHandle(lpDrawItemStruct->hDC);   CRectrc(lpDrawItemStruct->rcItem);   pDC->SelectStockObject(NULL_BRUSH);   pDC->Ellipse(rc);}/**//* *   擦除背景 */BOOLCImageButton::OnEraseBkgnd(CDC*pDC) {   CWnd*pParent=GetParent();      CRectrc;  

3、 GetWindowRect(rc);   pParent->ScreenToClient(rc);   pParent->InvalidateRect(rc,false);   pParent->UpdateWindow();   CDC*dcParent=pParent->GetDC();      pDC->BitBlt(0,0,rc.Width(),rc.Height(),dcParent,rc.left,rc.top,SRCCOPY);   pParent->ReleaseDC(dcParent);

4、 returntrue;} 如何在EDITBOX控件中使用背景位图方法一:资料来源:http://www.vckbase.com/document/viewdoc/?id=360摘要:在VC中,标准的WINDOWS控件如TREEVIEW,EDITBOX,COMBOBOX和LISTBOX等控件都不支持选择背景位图的属性,所以如果要使这些标准控件达到这种效果,必须有些非常规的方法。本文介绍一个CEDIT类如何实现背景位图,并且可以更换背景的例子。可能实现的方法还有其它种,如果有兴趣可以大家探讨。效果如图:关于网上

5、这个方法:我按照文中的方法进行多次尝试,始终不能达到理想的效果,下载下来的代码编译后效果很理想,但我多次尝试未果后,我将源码中的MyEditCtrl类直接拿来用了,尝试按照源码中的模式进行编码,但效果仍是不理想的。可能是我在某方面出了差错。效果如图:注意我故意将编辑框缩小,以便能显示出后面的背景,可以看到背景是画出来了,但是编辑框是黑色的。方法二:于是我尝试查找其他的实现方法,在网上看到了这篇文章:http://www.codeguru.com/cpp/controls/editctrl/transparen

6、t/article.php/c3921/这篇文章虽然是想实现透明的,但我觉得他的透明效果实现的并不理想。但对于背景位图的实现很有启发。下载了源码,发现他并没有重载CEdit类,而是直接在Dialog中的重载函数OnCtlColor()中进行的修改,我模仿他的方法进行了尝试,实现的效果比较理想,效果如图:从实现效果来讲,还算理想,但这种方法有一个缺陷,那就是,背景图只能画在Edit控件的内部,而我想要实现的效果是将“电话图标”作为编辑框的图标来显示,而在输入的时候直接在“电话图标”的后面的编辑框中进行,这就要求

7、将背景位图“前移”一段距离,画到编辑框的外面,可这种方法是无法实现的,一种伪实现是,将这张背景图片切割成两部分,“电话图标”部分在Dialog中来画,后半部分作为编辑框的背景来画。虽然效果是一样的,但这不是我想要的理想结果。看来要实现这种效果,只能通过重载CEdit类来实现了,所以方法一我究竟错在哪里,害要继续研究。方法二的关键代码:if(pWnd->GetDlgCtrlID()==IDC_EDIT_IMAGE){   pDC->SetBkMode(TRANSPARENT);   pDC->SetTextCo

8、lor(RGB(0,0,255));   pDC->SelectObject(&m_brush2);   returnm_brush2;}几点注意的地方:1.m_brush2是成员变量,也就是要保证它的生命周期不能只在重载函数OnCtlColor()中。2.m_brush2.CreateXXX()函数是创建画刷的函数,根据需要选择具体的创建函数,注意不要把该函数放在会被多次调用的函数(比如重载函数O

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。