- 浏览: 2031430 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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 1578__declspec(novtable) 的用法 __d ... -
解决URLDownloadToFile缓存问题的两种方法
2010-09-09 15:18 2906解决URLDownloadToFile缓存问题的两种方法 ... -
修改richedit背景
2010-07-19 22:52 1647RichEditCtrl::SetBackgroundCo ... -
使用ADO封装类的数据库程序开发实例(下)
2010-07-12 15:30 1474使用ADO封装类的数据库 ... -
使用ADO封装类的数据库程序开发实例(上)
2010-07-12 15:28 1215使用ADO封装类的数据库 ... -
VC防止窗口和控件闪烁的方法
2010-07-09 21:16 20221、将Invalidate()替换为Invalidate ... -
防止窗口闪烁地办法
2010-07-09 21:13 1512防止窗口闪烁地办法 也许我们都碰到过这种情况,当你 ... -
使用ADO _ConnectionPtr
2010-07-06 16:04 5265// GetUser.cpp : Defines the ... -
VC用ADO访问数据库全攻略
2010-07-06 15:29 1799VC用ADO访问数据库全 ... -
深入GetMessage和PeekMessage (引自-MSDN技术组)
2010-06-10 16:59 3726深入GetMessage和PeekMessage (引自 ... -
界面编程总结(1)
2010-06-02 13:32 4011原文地址:http://blog.csdn.net/byx ... -
获取信息的有关Windows API
2010-05-27 10:01 3146获取信息的有关Windows API 1.窗口信息 ... -
VC中如何实现窗口的隐藏
2010-05-13 10:08 7862VC中如何实现窗口的隐藏 用MFC做的Dialog ... -
SetConsoleCtrlHandler 处理控制台消息
2010-05-07 17:32 18144SetConsoleCtrlHandler 处理控制台消 ... -
解决决错误: error C2850: 'PCH header file'
2010-04-27 19:45 1953解决决错误: error C2850: 'PCH hea ... -
VC++ GDI+编程的字体和文本绘制
2010-04-13 13:12 7979字体是文字显示和打印的外观形式,它包括了文字的字样、风格和尺寸 ... -
VC利用GDI+显示透明的PNG图片
2010-04-12 16:59 115391.在你将要使用GDI+的工程中,完成初始化 ... -
GDI+编程基础(一)GDI+ Vs GDI
2010-04-12 15:59 2336下载源代码一、GDI GDI是位于应用程序与不同硬件之间 ... -
VC画图
2010-04-12 15:50 1539BOOL DrawPic(HDC hdc, TCHAR* ... -
对话框的数据交换--MFC深入浅出
2010-04-12 10:43 2458对话框数据交换指以下两种动作,或者是把内存数据写入对应的控 ...
相关推荐
在本文中,我们将深入探讨MFC(Microsoft Foundation Classes)中各种控件的使用与布局,特别是在实现透明Vista风格界面的技巧。MFC是微软提供的一套C++库,用于构建Windows应用程序,它极大地简化了Windows API的...
在Microsoft Foundation Classes (MFC)...总结,实现MFC中的半透明背景和控件自绘涉及窗口透明度设置、控件自定义绘制以及可能的DLL导入。这个过程需要对Windows API有深入理解,同时也需要注意性能优化和兼容性问题。
总结起来,本文介绍了如何在MFC环境中使用CTreeCtrl控件显示文件系统的目录结构,并通过CListCtrl显示选定项的详细信息。这个过程涉及到API函数的使用、控件属性的设置、事件处理以及资源管理。对于理解和实现文件...
通过上述方法,开发者可以灵活地调整MFC窗口及其控件的颜色和字体,从而实现更加个性化和美观的用户界面。这些技巧对于提高应用软件的用户体验至关重要。掌握这些设置方法,可以让你的应用程序更具吸引力和专业性。
在VC++(Visual C++)开发环境中,创建一个对话框(Dialog)并实现其背景透明,但保持对话框上的控件(Controls)不透明,是一个常见的需求,这通常涉及到Windows API的深入理解和自定义绘图技术。下面我们将详细...
总结:通过自定义CEdit派生类并重写OnPaint()函数,我们可以实现MFC 2005中的Edit控件的透明背景。同时,设置控件的WS_EX_TRANSPARENT扩展样式也非常重要,以允许控件透过自身显示其下的内容。这个技术可以应用于...
CButton是MFC对Windows API中的BUTTON控件的封装,它提供了一系列的方法和属性,用于创建和管理按钮。然而,CButton类默认并不支持PNG图片的显示,因此我们需要对其进行扩展,创建一个新的类来继承CButton,以便添加...
### Static控件动态透明显示的完美解决方案 ...这种方法不仅简单易用,而且可以广泛应用于各种需要透明效果的场景中。同时,通过创建自定义的`CTransparentStatic`类,还可以进一步增强控件的功能性和灵活性。
在本文中,我们将深入探讨如何基于Microsoft Foundation Class (MFC) 实现一个具有异形半透明背景的窗口,同时保持窗口内的控件不透明。这个技术在创建具有现代感和独特视觉效果的应用程序时非常有用。我们将分析...
总结来说,这个项目提供了一个在MFC环境中实现透明图像处理的例子。通过分析和理解这些源代码,开发者可以学习到如何在不同版本的Visual Studio中利用MFC实现复杂的图形效果,特别是透明图像的处理。这将有助于增强...
总结来说,实现"MFC中用在Paint函数中制作悬浮透明标尺"涉及的关键知识点包括:MFC框架、透明对话框的创建、`OnEraseBkgnd`和`OnPaint`函数的重写、GDI绘图、层叠窗口的透明度控制以及可能的图表控件集成。...
- **CStatic控件**:在MFC中,`CStatic`类表示静态文本控件或位图控件。它可以用来显示只读的文本或图像,并且不支持用户交互。 #### 知识点二:CTransparentStatic类及其实现透明功能 - **CTransparentStatic类**...
总结来说,这个项目展示了如何在QT中创建自定义控件以实现独特的进度条样式,以及如何利用Qt的特性实现窗体透明。这对于想要提升应用界面独特性的开发者来说是一个很好的学习案例,同时也提醒我们,即使在旧的开发...
在MFC中,我们可以创建一个透明的窗口类,覆盖在屏幕上,监听鼠标按下、移动和释放事件,动态更新矩形的选择范围。同时,还需要考虑非客户区的鼠标消息处理,以保证用户能正常地拖动和缩放选择框。 四、报错处理 在...
总结起来,要在MFC程序中显示PNG图像,你需要: 1. 引入libpng库。 2. 创建自定义控件继承自CStatic。 3. 实现PNG加载、解码和绘制功能。 4. 处理窗口大小变化以保持图像比例。 5. 配置项目设置,链接libpng和zlib库...
在MFC(Microsoft Foundation Classes)开发中,自绘制是指开发者自己控制控件的绘制过程,而不是依赖于系统默认的绘制方式。对于按钮控件而言,自绘制可以使得按钮更加美观或者符合特定的设计需求。 #### 二、自...
而UIDll可能是编译生成的动态链接库文件,用于在其他MFC项目中引入并使用我们实现的半透明背景和自绘控件功能。 总结来说,通过结合MFC、Windows API和Boost库,我们可以创建出具有独特视觉效果的用户界面。理解并...
在这个例子中,我们将探讨如何在控件上绘制对话框背景以实现透明效果,具体是针对一个使用TreeView控件的情况。这个实例来源于一个已有的教程,原文可以在"http://www.vckbase.com/index.php/wv/206.html"找到。为了...
在MFC中实现控件背景透明,通常需要自定义控件并覆盖其OnPaint()函数。通过在OnPaint()中使用CPaintDC对象绘制透明效果,可以使得控件背景与父窗口背景融为一体。此外,可能还需要处理WM_ERASEBKGND消息,返回TRUE以...
总结来说,通过MFC可以方便地实现Windows应用程序的各种高级功能,如系统级别的操作(关机)、界面调整(隐藏任务栏)和视觉效果(透明对话框)。理解并熟练运用这些技术,能帮助开发者创造出更加丰富和个性化的用户...