- 浏览: 1998491 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (651)
- ACE (35)
- BAT (9)
- C/C++ (116)
- fast-cgi (14)
- COM (27)
- python (59)
- CGI (4)
- C# (2)
- VC (84)
- DataBase (29)
- Linux (96)
- P2P (6)
- PHP (15)
- Web (6)
- Memcached (7)
- IME输入法 (11)
- 设计模式 (2)
- 搜索引擎 (1)
- 个人情感 (4)
- 笔试/面试 (3)
- 一亩三分地 (33)
- 历史 (2)
- 地理 (1)
- 人物 (3)
- 经济 (0)
- 不仅仅是笑哦 (43)
- 小故事大道理 (2)
- http://www.bjdsmyysjk120.com/ (0)
- http://www.bjdsmyy120.com/ (0)
- 它山之石可以攻玉 (15)
- 大学生你关注些什么 (28)
- 数据恢复 (1)
最新评论
-
luokaichuang:
这个规范里还是没有让我明白当浏览器上传文件时,STDIN的消息 ...
FastCGI规范 -
effort_fan:
好文章!学习了,谢谢分享!
com技术简介 -
vcell:
有错误os.walk(strPath)返回的已经是全部的文件和 ...
通过python获取目录的大小 -
feifeigd:
feifeigd 写道注意:文章中的CPP示例第二行 #inc ...
ATL入门:利用ATL编写简单的COM组件 -
feifeigd:
注意:文章中的CPP示例第二行 #include " ...
ATL入门:利用ATL编写简单的COM组件
资料来源: http://www.cnblogs.com/songsu/articles/1370665.html 关键是其中的OnEraseBkgnd。OnDrawItem只是在原来BUTTON的位置上画了一个椭圆显示BUTTON的位置。 /* 资料来源: http://www.vckbase.com/document/viewdoc/?id=360 摘要:在VC中,标准的WINDOWS控件如TREEVIEW,EDITBOX,COMBOBOX和LISTBOX等控件都不支持选择背景位图的属性,所以如果要使这些标准控件达到这种效果,必须有些非常规的方法。本文介绍一个CEDIT类如何实现背景位图,并且可以更换背景的例子。可能实现的方法还有其它种,如果有兴趣可以大家探讨。效果如图: 关于网上这个方法:我按照文中的方法进行多次尝试,始终不能达到理想的效果,下载下来的代码编译后效果很理想,但我多次尝试未果后,我将源码中的MyEditCtrl类直接拿来用了,尝试按照源码中的模式进行编码,但效果仍是不理想的。可能是我在某方面出了差错。 效果如图: 注意我故意将编辑框缩小,以便能显示出后面的背景,可以看到背景是画出来了,但是编辑框是黑色的。 于是我尝试查找其他的实现方法,在网上看到了这篇文章: http://www.codeguru.com/cpp/controls/editctrl/transparent/article.php/c3921/ 这篇文章虽然是想实现透明的,但我觉得他的透明效果实现的并不理想。但对于背景位图的实现很有启发。 下载了源码,发现他并没有重载CEdit类,而是直接在Dialog中的重载函数OnCtlColor()中进行的修改,我模仿他的方法进行了尝试,实现的效果比较理想,效果如图: 从实现效果来讲,还算理想,但这种方法有一个缺陷,那就是,背景图只能画在Edit控件的内部,而我想要实现的效果是将“电话图标”作为编辑框的图标来显示,而在输入的时候直接在“电话图标”的后面的编辑框中进行,这就要求将背景位图“前移”一段距离,画到编辑框的外面,可这种方法是无法实现的,一种伪实现是,将这张背景图片切割成两部分,“电话图标”部分在Dialog中来画,后半部分作为编辑框的背景来画。虽然效果是一样的,但这不是我想要的理想结果。看来要实现这种效果,只能通过重载CEdit类来实现了,所以方法一我究竟错在哪里,害要继续研究。 if (pWnd->GetDlgCtrlID() == IDC_EDIT_IMAGE) pDC->SetBkMode(TRANSPARENT); } 1. m_brush2是成员变量,也就是要保证它的生命周期不能只在重载函数OnCtlColor()中。 2.m_brush2.CreateXXX()函数是创建画刷的函数,根据需要选择具体的创建函数,注意不要把该函数放在会被多次调用的函数(比如重载函数OnCtlColor())中,以免多次创建错误,除非你在第二次创建之前调用了m_brush.DeleteObject()函数。 3.直接拷贝上面的代码是效果是出不来的,你还需要一个CBitmap位图对象,并初始化它和m_brush2对象。 为了搞定这个效果,花费了我不少时间。 Edit Box的颜色分为3部分,文字颜色,文字背景色,编辑框背景色。所以如果“文字背景色,编辑框背景色”能和对话框背景色一直的话,就能实现透明。 直接在Dialog中的重载函数OnCtlColor里实现: if (pWnd->GetDlgCtrlID() == IDC_TRANS_EDIT) return m_brush; } 注意m_brush是成员变量,是为RGB(236,233,216)的纯色画刷。该颜色就是对话框的背景色。 方法二: 通过继承CEdit类来实现. 网上找到的,一种伪实现的方法: http://www.codeproject.com/KB/edit/ctrltrans.aspx 根据前面的分析return m_brush能够改变“编辑框背景色”,而SetBkColor能够改变“文字背景色”。 在这里,我可以得到一个Dialog的DC然后把Edit的区域的位图信息复制出来保存成一个CBitmap对象,在用这个bitmap对象创建一个画刷,把这个画刷返回,让对话框有这个画刷绘制控件。 从某种角度来说,透明Edit是实现了,但当把鼠标点击“文字背景色”时,能够看到一个黑色的区域。。。很不理想。 这种情况与上面位图背景中提到的方法一所遇到的问题有点类似,只是通常情况下看不到黑框了。 http://www.codeguru.com/Cpp/controls/controls/progresscontrols/article.php/c2221 http://www.codeproject.com/KB/miscctrl/cprogressctrlst.aspx 实例一实现了 彩色颜色渐变进度条, 实例二实现了贴图进度条。 我只实现了实例一,还没有实现实例二。MFC中各种控件透明的实现方法总结
Button:
* 画项
*/
void CImageButton::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)
{
CDC *pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
CRect rc(lpDrawItemStruct->rcItem);
pDC->SelectStockObject(NULL_BRUSH);
pDC->Ellipse(rc);
}
/**//*
* 擦除背景
*/
BOOL CImageButton::OnEraseBkgnd(CDC* pDC)
{
CWnd *pParent = GetParent();
CRect rc;
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);
return true;
}如何在EDITBOX控件中使用背景位图
方法一:
方法二:
方法二的关键代码:
{
pDC->SetTextColor(RGB(0,0,255));
pDC->SelectObject(&m_brush2);
return m_brush2;几点注意的地方:
Transparent Edit Box
透明的伪实现:
方法一:
{
pDC->SetBkColor(RGB(236,233,216));透明的True Implementaion 分析:
方法一:一个不太完美的实现方法。
Owner Draw Progress Control
资料来源:
实例一:
实例二:
关于资料:
发表评论
-
__declspec(novtable) 的用法
2010-11-27 14:37 1528__declspec(novtable) 的用法 __d ... -
解决URLDownloadToFile缓存问题的两种方法
2010-09-09 15:18 2816解决URLDownloadToFile缓存问题的两种方法 ... -
修改richedit背景
2010-07-19 22:52 1598RichEditCtrl::SetBackgroundCo ... -
使用ADO封装类的数据库程序开发实例(下)
2010-07-12 15:30 1427使用ADO封装类的数据库 ... -
使用ADO封装类的数据库程序开发实例(上)
2010-07-12 15:28 1169使用ADO封装类的数据库 ... -
VC防止窗口和控件闪烁的方法
2010-07-09 21:16 19591、将Invalidate()替换为Invalidate ... -
防止窗口闪烁地办法
2010-07-09 21:13 1465防止窗口闪烁地办法 也许我们都碰到过这种情况,当你 ... -
使用ADO _ConnectionPtr
2010-07-06 16:04 5220// GetUser.cpp : Defines the ... -
VC用ADO访问数据库全攻略
2010-07-06 15:29 1762VC用ADO访问数据库全 ... -
深入GetMessage和PeekMessage (引自-MSDN技术组)
2010-06-10 16:59 3672深入GetMessage和PeekMessage (引自 ... -
界面编程总结(1)
2010-06-02 13:32 3958原文地址:http://blog.csdn.net/byx ... -
获取信息的有关Windows API
2010-05-27 10:01 3082获取信息的有关Windows API 1.窗口信息 ... -
VC中如何实现窗口的隐藏
2010-05-13 10:08 7793VC中如何实现窗口的隐藏 用MFC做的Dialog ... -
SetConsoleCtrlHandler 处理控制台消息
2010-05-07 17:32 17988SetConsoleCtrlHandler 处理控制台消 ... -
解决决错误: error C2850: 'PCH header file'
2010-04-27 19:45 1886解决决错误: error C2850: 'PCH hea ... -
VC++ GDI+编程的字体和文本绘制
2010-04-13 13:12 7902字体是文字显示和打印的外观形式,它包括了文字的字样、风格和尺寸 ... -
VC利用GDI+显示透明的PNG图片
2010-04-12 16:59 114691.在你将要使用GDI+的工程中,完成初始化 ... -
GDI+编程基础(一)GDI+ Vs GDI
2010-04-12 15:59 2295下载源代码一、GDI GDI是位于应用程序与不同硬件之间 ... -
VC画图
2010-04-12 15:50 1488BOOL DrawPic(HDC hdc, TCHAR* ... -
对话框的数据交换--MFC深入浅出
2010-04-12 10:43 2400对话框数据交换指以下两种动作,或者是把内存数据写入对应的控 ...
相关推荐
MFC实现控件的半透明 , 实现自定义控件
MFC控件:listctrl使用方法总结
在MFC中利用Tab控件实现了选项卡的功能呢给,同时在子对话框中利用图像控件显示图像,图像大小根据控件大小进行缩放!
MFC半透明窗体 不透明控件 png背景 GDI+ 不规则窗体
mfc自带的tabsheet控件是横排按钮在上面的,这个自绘控件实现在左侧竖排的Tab选择,并且可以添加图标。
代码提供了一种实现半透明控件的思路,其中还有可以优化的,比如双缓存,不擦除背景等。
该例综合实现了MFC控件的实现,了解掌握MFC控件
mfc中TabControl控件的美化,可添加位图更改标签样式,并在标签前添加位图
MFC中Tab控件的使用方法 免费下载 MFC中Tab控件的使用方法 免费下载
MFC树形控件的使用,mfc_tree,XML的调用
【初学者】通过GDI+PNG,实现MFC控件透明,看不懂GDI的配置请百度。
MFC中通用控件的初始化相关内容 按从网上淘来的,大家分享哈
MFC tabctrl控件重载, 实现标签加载BMP图片, 美化标签. 花了很多积分,现在免费给好学者参考,不容易啊!
透明列表框MFClist实现背景透明背景,可以下载看看啊
MFC控件编程实现ATM
日历控件的添加在资源列表框内,主要描述了添加完日历控件后消息响应函数里的设置情况
MFC自绘控件,实现晶体管字体。 简单原创,欢迎浏览
MFC实现透明位图透明背景Demo,随手写的,笔记之
运用MFC来实现ActiveX控件的方法.pdf