摘要:首先感谢大家对第一帖的支持,应一些网友烈要求下面我在关于上一贴的一些补充和说明(老鸟可以无视)这一贴是实战+理论不知道第一帖的先看第一帖:http://topic.csdn.net/u/20110710/19/5209f358-31c8-4057-b108-02155a417fd0.html1).补充个高级可重载函数PreSubclassWindow(),我的理解是允许用户在子类化之前再做一额外些处理 ,这个重载函数也是非常重要的,要引起相当的注意。可以在这里改变控件的大小,位置,窗口样式,字体 ,等等.....你能想到的能改的,都可以在这里改.2).关于Edit的补充说明:我最初的自绘方法是
阅读全文
随笔分类 - 图形界面编程
摘要:前言:从这学期开始就一直在学习自绘控件(mfc),目标是做出一款播放器界面,主要是为了打好基础,因为我基础实在是很烂....说说我自己心得体会以及自绘控件的方法吧,算是吐槽吧,说的不对和不全的地方,或者有更好的方法,请不吝赐教。我的机器环境是:Windows7旗舰版 Service Pack 1,Visual studio 20051).重绘某个控件时,强烈推荐使用子类化方法,比如想自绘Button控件, 首先添加自己的类CMYButton 继承自 CButton ,声明一个CMYButton 对象,然后使用 SubclassDlgItem(UINT nID, CWnd* pParent );
阅读全文
摘要:(本文尝试通过一些简单的实验,来分析Windows的窗口机制,并对微软的设计理由进行一定的猜测,需要读者具备C++、Windows编程及MFC经验,还得有一定动手能力。文中可能出现一些术语不统一的现象,比如“子窗口”,有时候我写作“child window”,有时候写作“child”,我想应该不会有太大影响,文章太长,不一一更正了)问题开始于我的最近的一次开发经历,我打算把程序的一部分界面放在DLL中,而这部分界面又需要使用到Tooltip,但DLL中的虚函数PreTranslateMessage无法被调用到,原因大家可以在网上搜索一下,这并不是我这篇文章要讲的。PreTranslateMes
阅读全文
摘要:1、GDI名字的意义GDI Graphic Device Interface,我说不清和GUI有什么区别。可能一种针对设备,一种针对用户而言吧,反正以后都说GDI,也就是Windows的图形编程。2、设备描述上下文HDCHandle Device Context这个是关键的关键,可以理解成画图的环境,何谓环境,画板,纸,笔,尺寸,字体,颜色,区域等。反正包括你能想到的和未能想到的了。要画出不同的图形,很大程度上是对HDC的修改。3、HDC的创建方式WM_PAINT消息来的时候,用:hdc = BeginPaint(hwnd, &ps);//......EndPaint(hwnd, &a
阅读全文
摘要:前言:从这学期开始就一直在学习自绘控件(mfc),目标是做出一款播放器界面,主要是为了打好基础,因为我基础实在是很烂....说说我自己心得体会以及自绘控件的方法吧,算是吐槽吧,说的不对和不全的地方,或者有更好的方法,请不吝赐教。我的机器环境是:Windows7旗舰版 Service Pack 1,Visual studio 20051).重绘某个控件时,强烈推荐使用子类化方法,比如想自绘Button控件, 首先添加自己的类CMYButton 继承自 CButton ,声明一个CMYButton 对象,然后使用 SubclassDlgItem(UINT nID, CWnd* pParent );
阅读全文
摘要:随着Microsoft凭借Windows在操作系统上取得的巨大成绩,Windows用户界面也日益成为业界标准。统一的界面给广大用户对应用软件的学习与使用带来了很大方便。但每天都面对同一副面孔,日久天长难免会产生一些厌倦,想开发一些"离经叛道"的应用程序,如果能够一改Windows千篇一律的"标准"界面,一定会给用户带来一种清新的感觉。标准Windows应用程序窗口一般为带有标题栏的浅灰色矩形外观,因而"异形"对话框/窗口也主要是颜色与外形上动手脚。本实例实现了一个"精灵"窗口,程序编译运行后的界面效果如图一所示:图
阅读全文
摘要:前一阵突然想起了9月份电面某公司实习时的二面题,大概就是说怎么用Win32 API实现一个透明的窗口,估计当时我的脑残答案肯定让面试官哭笑不得吧。所以本人决定好好研究下这个问题。经过一下午的摸索,基本掌握了使用Win32 API创建各种匪夷所思的窗口的基本思路。(以下文字基于本人的个人理解,由于本人技术和经验原因不保证正确性,希望各位不吝指正)首先我们需要了解一些基础知识。1、Layered Windows。这是Windows2000开始引入的新概念,重新定义了窗口的Hit Testing方法,以前都是把窗口按rectangle的方式裁剪,而把窗口加上WS_EX_LAYERED的Style后就
阅读全文
摘要:前面提到,我们可以用SetWindowRgn或SetLayeredWindowAttributes实现不规则以及半透明的效果对于SetWindowRgn,它通过一个Rgn来设置区域,这个Rgn一般可以从图片中读取,在这张图片中,将不需要显示的区域标记为一种特殊的颜色,这里有个问题,必须保证这种颜色没有被正常的区域使用,否则会被误伤。为了解决这个问题,可以考虑用两张图片,增加一张单色的掩码图,这种方案带来了额外的管理开销。SetWindowRgn的好处是效率较高,对于大部分自绘的皮肤,一般只有四个角落有一些不规则,所以用SetWindowRgn是最好的选择。SetLayeredWindowAtt
阅读全文
摘要:(声明:Alberl以后说到开源库,一般都是指著名的、或者不著名但维护至少3年以上的。那些把代码一扔就没下文的,Alberl不称之为开源库,只称为开源代码。这里并不是贬低,像Alberl前面那个系列的教程《2013 duilib入门简明教程》,还有本系列教程,还有前面介绍的CodeProject,基本上都是代码往上面一扔,就不用再怎么维护的。这些都称之为开源代码,其实开源代码对新手的帮助更大,因为很简明的说明了代码用法~O(∩_∩)O~) 前面两个教程已经对制作界面的几种方式进行了比较,权威界面库已经比较过了,那么接下来就是上一个教程介绍的那三种方式。 而上一个教程已经说的很明确了,用那三..
阅读全文
摘要:代码下载:http://download.csdn.net/detail/qq316293804/6502879迅雷播放器教程汇总:仿迅雷播放器教程 -- 基于ffmpeg的C++播放器 (1)仿迅雷播放器教程 -- 媒体播放器对比 (2)仿迅雷播放器教程 -- 媒体播放三大底层架构简析 (3)仿迅雷播放器教程 -- 基于VLC的C++播放器 (4)仿迅雷播放器教程 -- 封装VLC (5)仿迅雷播放器教程 -- 基于VLC的MFC播放器 (6)仿迅雷播放器教程 -- 十年经验大牛对MFC的认识 (7)仿迅雷播放器教程 -- 权威界面库对比 (8)仿迅雷播放器教程 -- C++界面制作方法的对
阅读全文
摘要:IntroductionThis class is derived from the MFCCDialog. It supports the following features :-If running on Windows 2000 or Windows XP, make any one color transparent so that you can see through regions of the dialogIf running on Windows 2000 or Windows XP, make the whole dialog translucentAdding a bi
阅读全文
摘要:IntroductionThis program demonstrates how to useCDHtmlDialogandSetWindowRgnfunctions to give a dialog non-rectangular HTML skins. If you are familiar with HTML, it will be faster than other ways to deal with beautiful skins. The idea comes from the article,"Gimme Some Skin... VideoSkins",
阅读全文
摘要:Using SetWindowRgnHomeBack To Tips PageIntroductionThere are lots of interesting reasons for creating odd-shaped windows. This essay explains how to create a window of unusual shape.One of the first questions you should ask is "Why?" There are lots of good reasons for needing to create odd
阅读全文
摘要:前一段在一个仿QQ的IM通讯工具中加入屏幕截图以及截图编辑功能,但是测试中发现当连续进行几十次截图后,系统会出现白屏,开始以为和win7经常闪白有关,屏幕截图截取到闪白的瞬间导致白屏,后来发现是GDI内存不足,申请不到GDI内存贴图失败所致。于是找了GDI泄露的工具,对程序进行GDI内存检测,下面就介绍两款GDI泄露检测工具的用法以及GDI编程的一些注意事项。第一款:GDIndicator 支持win7+xp 下载地址1、启动待检测的程序和GDIndicator,启动顺序没有要求,之后F5刷新,就能看到系统中所有进程,和使用的资源数找到想要查看的进程,这里我们的程序是 TPCommonCont
阅读全文
摘要:对开发中常见的内存泄露,GDI泄露进行检测一、GDI泄露检测方法:在软件测试阶段,可以通过procexp.exe 工具,或是通过任务管理器中选择GDI对象来查看软件GDI的对象是使用情况。注意点:Create出来的GDI对象,都要用DeleteObject来释放;Create出来的DC,都要用DeleteDC来释放,GetDC得出的DC,要用ReleaseDC来释放。以下是一些常用到的函数:1、 检查GetWindowDC(), 后面是否有ReleaseDC();2、 检测GetDC();后面是否有ReleaseDC();3、 检测画刷CBrush:CreateSolidBrush()-》 D
阅读全文
摘要:用.Net写的地图编辑器,最近在一个长时间使用的策划手里频繁挂掉。定位到原因应该是GDI泄露。但在几千行代码里手工寻找泄漏点实在是有些困难,直到在网上找到了这个检测GDI泄露的工具GDILeaks。它的强大之处,在于可以将程序里当前占用的gdi位图、dc用图形格式显示出来,这样,泄露点基本上就直接展示在你眼前了。另外,关于泄露为什么会发生,我还有些疑问。经检查,泄漏点是这样的C#代码void doSomeThing(){Bitmap tmpBmp = new Bitmap(100,100);returntransformBmp(tmpBmp); //这里对tmpBmp放大后存到一张新位图上返回
阅读全文
摘要:查GDI对象泄露的利器:GDIView可以很详细的查到进程的GDI对象的总个数,详细的GDI对象的个数,以及其增减数量。其GDI对象类型也可以很详细的得知,以及其内存地址,句柄。实在是好使!下载地址:http://www.nirsoft.net/utils/gdi_handles.html中文版32x下载地址:http://www.hanzify.org/software/12680.html
阅读全文
摘要:清除屏幕闪烁(转自网上)由于作图过于复杂和频繁,所以时常出现闪烁的情况,一些防止闪烁的方法,如下:(1)将Invalidate()替换为InvalidateRect()。Invalidate()会导致整个窗口的图象重画,需要的时间比较长,而InvalidateRect()仅仅重画Rect区域内的内容,所以所需时间会少一些。不要为一小块区域的重画就调用Invalidate(),不愿意自己去计算需要重画的Rect,事实上,如果你确实需要改善闪烁的情况,计算一个Rect所用的时间比起重画那些不需要重画的内容所需要的时间要少得多。(2)禁止系统擦除你的窗口。系统在需要重画窗口的时候会帮你用指定的背景色
阅读全文
摘要:一般的windows 复杂的界面需要使用多层窗口而且要用贴图来美化,所以不可避免在窗口移动或者改变大小的时候出现闪烁。先来谈谈闪烁产生的原因原因一:如果熟悉显卡原理的话,调用GDI函数向屏幕输出的时候并不是立刻就显示在屏幕上只是写到了显存里,而显卡每隔一段时间把显存的内容输出到屏幕上,这就是刷新周期。一般显卡的刷新周期是 1/80秒左右,具体数字可以自己设置的。这样问题就来了,一般画图都是先画背景色,然后再把内容画上去,如果这两次操作不在同一个刷新周期内完成,那么给人的视觉感受就是,先看到只有背景色的图像,然后看到画上内容的图像,这样就会感觉闪烁了。解决方法:尽量快的输出图像,使输出在一个刷新
阅读全文
摘要:本文讨论的重点介于两者 之间 — 公共控件赋予您想要的大部分功能,但控件的外观并不是您想要的。例如,列表视图控件提供在许多视图风格中显示数据列表的方式 — 小图标、大图标、列表和详细列表(报告)。然而,如果您想要一个网格控件,那结果怎样呢?尽管公共控件库里没有特别包含网格,但是列表视图控件与它较为接 近,它以行和列显示数据,并有一个相关的标头控件。因此,许多人以一个标准的列表视图控件为起点创建自己的网格控件,然后重写该控件及其子项的呈现方式或 绘制方式。主宰绘图操作即使“只”进行绘制,您仍然有至少四种选项可用,它们都具有鲜明的优缺点:• 处理 WM_PAINT• 所有者绘制• 自定义绘制• 处
阅读全文