DoubleLi

qq: 517712484 wx: ldbgliet

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

随笔分类 -  VC/MFC

上一页 1 ··· 12 13 14 15 16 17 18 19 20 ··· 30 下一页

摘要:查GDI对象泄露的利器:GDIView可以很详细的查到进程的GDI对象的总个数,详细的GDI对象的个数,以及其增减数量。其GDI对象类型也可以很详细的得知,以及其内存地址,句柄。实在是好使!下载地址:http://www.nirsoft.net/utils/gdi_handles.html中文版32x下载地址:http://www.hanzify.org/software/12680.html 阅读全文
posted @ 2013-11-18 20:44 DoubleLi 阅读(1063) 评论(0) 推荐(0)

摘要:清除屏幕闪烁(转自网上)由于作图过于复杂和频繁,所以时常出现闪烁的情况,一些防止闪烁的方法,如下:(1)将Invalidate()替换为InvalidateRect()。Invalidate()会导致整个窗口的图象重画,需要的时间比较长,而InvalidateRect()仅仅重画Rect区域内的内容,所以所需时间会少一些。不要为一小块区域的重画就调用Invalidate(),不愿意自己去计算需要重画的Rect,事实上,如果你确实需要改善闪烁的情况,计算一个Rect所用的时间比起重画那些不需要重画的内容所需要的时间要少得多。(2)禁止系统擦除你的窗口。系统在需要重画窗口的时候会帮你用指定的背景色 阅读全文
posted @ 2013-11-18 17:21 DoubleLi 阅读(6213) 评论(0) 推荐(1)

摘要:窗口是屏幕上的一个矩形区域。窗口分为3种:重叠窗口、弹出窗口和子窗口。每个窗口都有由系统绘制的“非客户区”和应用程序绘制的“客户区”。在MFC中,CWnd类为各种窗口提供了基类。1通过HWND获得CWnd指针通过HWND获得Cwnd指针可以调用Cwnd::FromHandle函数。12345678voidCDemoDlg::OnButton1() {HWNDhWnd = GetSafeHwnd(); //获得当前窗口的句柄CWnd* pWnd = CWnd::FromHandle(hWnd); //通过HWND获得CWnd指针CString strText = _T("") 阅读全文
posted @ 2013-11-18 12:49 DoubleLi 阅读(517) 评论(0) 推荐(0)

摘要:英文单词解释clip:夹子、子弹夹、回形针;夹住,修剪sibling:同胞兄弟或姐妹overlapped:重叠这两个Window Stype的特性与异同素来不太清楚,今日作一笔记:MSDN的解释为:WS_CLIPCHILDRENExcludes the area occupied by child windows when you draw within the parent window. Used when you create the parent window.WS_CLIPSIBLINGSClips child windows relative to each other; that 阅读全文
posted @ 2013-11-16 16:15 DoubleLi 阅读(519) 评论(0) 推荐(0)

摘要:一个View中用到了一个CListCtrl,在OnInitialUpdate函数里面他调用了m_listCtrl.ModifyStyleEx(0, LVS_EX_FULLROWSELECT);但是结果是并没有改变View中这个ListCtrl的效果。 仔细的查阅了MSDN的关于ModifyStyleEx的说明,发现没什么可以的地方,调试几遍发现也没异常,最后在网上一搜索ModifyStyleEx,结果发现碰到这个问题的朋友还真不少,有一遍关于ModifyStyle和ModifyStyleEx无法改变样式的解决方法的文章被转载得到处都是,不仅感慨现在的互联网信息重复程度~~结果看完文章很失望,他 阅读全文
posted @ 2013-11-16 15:55 DoubleLi 阅读(3337) 评论(0) 推荐(0)

摘要:动态子类化CComboBox以得到子控件EDIT及LISTBOXJoise.LI写于2004-4-6ComboBox是比较常用的一个控件,有三种样式:CBS_SIMPLE(简单),CBS_DROPDOWN(下拉),CBS_DROPDOWNLIST(下拉列表),其中下拉列表样式是不允许输入的,简单样式是永远都显示下拉框的。ComboBox是由一个ListBox和一个Edit框组合而成。本文将以限制只能输入电话号码为例介绍子类化过程得到Edit框(类似的可以得到ListBox)。电话号码只能有数字和“-”和“+”组成,经查ASCII表,知道对应的ASCII值为48-57及45和43共12个值。好, 阅读全文
posted @ 2013-11-16 15:39 DoubleLi 阅读(795) 评论(0) 推荐(0)

摘要:通过映射OnCtlColor消息,而后在该函数中使用pDC->SetBkMode(TRANSPARENT)使Static控件背景透明时会出现:文本覆盖重影的问题,当改变控件的文本就会发生新文本与旧文本重叠的现象。 可以通过以下方式使Static控件文本在透明状态下改变时不会产生文本重叠问题: 1、由于Static控件的背景已经是透明的了,那么旧文本应该是画在Static控件的父窗口上的。 2、在给Static控件设置新文本之后(不是之前!)刷新父窗口即可。例如: GetDlgItem(IDC_STATIC_TEST)->SetWindowText(_T("北京2008&q 阅读全文
posted @ 2013-11-15 20:22 DoubleLi 阅读(4165) 评论(0) 推荐(0)

摘要:动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的。 一、创建动态控件: 为了对照,我们先来看一下静态控件的创建。 放置静态控件时必须先建立一个容器,一般是对话框,这时我们在对话框编辑窗口中,从工具窗口中拖出所需控件放在对话框中即可,再适当修改控件ID,设置控件属性,一个静态控件就创建好了,当对话框被显示时,其上的控件也会显示。 静态控件不需要调用Create()函数来创建。 而创建动态控件有很大不同,以下以按钮为例,看一下动态控件的创建过程: 1.建立控件ID号: ID号是控件的标识,创建控件前必须先为它设置一个ID号。 打开资源中的“St... 阅读全文
posted @ 2013-11-15 19:58 DoubleLi 阅读(1201) 评论(0) 推荐(0)

摘要:下列附有VS2008发布程序介绍:vc2008程序发布指南2008-05-0317:46vc2008开发的程序的发布方式可以有5种方式:1.采用静态链接到crt和MFC.只要你拥有组成程序的所有源代码,你就可以采用这种方式,这种方式除了程序变大一点,好处多多:1)不必重新发布vc2008基础库vcredist_x86.exe(安装到WinSxS).2)不必产生,嵌入manifest.3)也不把vc2008基础库放在程序所在目录.2.exe(嵌入manifest)+vcredist_x86.exe确保程序正确产生并嵌入manifest文件,然后把程序和vcredist_x86.exe一起发布.用 阅读全文
posted @ 2013-11-13 22:19 DoubleLi 阅读(1446) 评论(0) 推荐(0)

摘要:在VC++2008的项目中,如何显示地指定要使用的C++库的版本?开发环境:VS2008 SP1 +Win2003 SP2 因为我的VS2008安装了SP1补丁,所以有了9.0.30729.1的MFC库文件(MFC90.DLL MSVCR90.DLL)。新建了一个MFC应用程序,编译为RELEASE版本,叫做“test1.exe”,可以从程序中的清单文件(manifest)看到以下内容:XML code... ... 说明本程序需要... 阅读全文
posted @ 2013-11-13 22:06 DoubleLi 阅读(7138) 评论(0) 推荐(0)

摘要:目录:1.Win32项目的windows窗体程序的向导生成了如下代码2.手工生成代码如下3.当消息队列中没有消息需要处理,我们可以利用这段时间处理我们自己的任务1.Win32项目的windows窗体程序的向导生成了如下代码:[cpp]view plaincopy //Timer.cpp:定义应用程序的入口点。//#include"stdafx.h"#include"Timer.h"#defineMAX_LOADSTRING100//全局变量:HINSTANCEhInst;//当前实例TCHARszTitle[MAX_LOADSTRING];//标题栏文本 阅读全文
posted @ 2013-11-11 11:21 DoubleLi 阅读(4959) 评论(0) 推荐(0)

摘要:一般的windows 复杂的界面需要使用多层窗口而且要用贴图来美化,所以不可避免在窗口移动或者改变大小的时候出现闪烁。先来谈谈闪烁产生的原因原因一:如果熟悉显卡原理的话,调用GDI函数向屏幕输出的时候并不是立刻就显示在屏幕上只是写到了显存里,而显卡每隔一段时间把显存的内容输出到屏幕上,这就是刷新周期。一般显卡的刷新周期是 1/80秒左右,具体数字可以自己设置的。这样问题就来了,一般画图都是先画背景色,然后再把内容画上去,如果这两次操作不在同一个刷新周期内完成,那么给人的视觉感受就是,先看到只有背景色的图像,然后看到画上内容的图像,这样就会感觉闪烁了。解决方法:尽量快的输出图像,使输出在一个刷新 阅读全文
posted @ 2013-11-06 14:14 DoubleLi 阅读(1500) 评论(0) 推荐(0)

摘要:本文讨论的重点介于两者 之间 — 公共控件赋予您想要的大部分功能,但控件的外观并不是您想要的。例如,列表视图控件提供在许多视图风格中显示数据列表的方式 — 小图标、大图标、列表和详细列表(报告)。然而,如果您想要一个网格控件,那结果怎样呢?尽管公共控件库里没有特别包含网格,但是列表视图控件与它较为接 近,它以行和列显示数据,并有一个相关的标头控件。因此,许多人以一个标准的列表视图控件为起点创建自己的网格控件,然后重写该控件及其子项的呈现方式或 绘制方式。主宰绘图操作即使“只”进行绘制,您仍然有至少四种选项可用,它们都具有鲜明的优缺点:• 处理 WM_PAINT• 所有者绘制• 自定义绘制• 处 阅读全文
posted @ 2013-11-06 14:11 DoubleLi 阅读(1475) 评论(0) 推荐(0)

摘要:oid CMainFrame::OnLButtonDown(UINT nFlags, CPoint point){ if (!IsZoomed() && !IsIconic()) { SendMessage(WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(point.x, point.y)); } CUIWnd::OnLButtonDown(nFlags, point);} 阅读全文
posted @ 2013-11-06 14:09 DoubleLi 阅读(380) 评论(0) 推荐(0)

摘要:一. GDI编程基础字幕叠加,应当是属于图形、图像处理的范畴。在Windows平台上,图形、图像处理的方法当然首选GDI(Graphics Device Interface,图形设备接口)。GDI是什么?GDI其实是一套API函数;它们功能丰富,使用起来简单、灵活。下面,我们首先来介绍一些GDI编程的基础知识。 GDI函数有很多,我们大致可以把它们分成如下几类: · 设备上下文(Device Context,简称DC)函数,如GetDC、CreateDC、DeleteDC等; · 画线函数,如LineTo、Polyline、Arc等; · 填充画图函数,如Elli 阅读全文
posted @ 2013-11-06 13:54 DoubleLi 阅读(957) 评论(0) 推荐(0)

摘要:原帖地址:http://blog.joycode.com/yaodong/archive/2004/11/26/39764.aspx一般的windows 复杂的界面需要使用多层窗口而且要用贴图来美化,所以不可避免在窗口移动或者改变大小的时候出现闪烁。先来谈谈闪烁产生的原因原因一:如果熟悉显卡原理的话,调用GDI函数向屏幕输出的时候并不是立刻就显示在屏幕上只是写到了显存里,而显卡每隔一段时间把显存的内容输出到屏幕上,这就是刷新周期。一般显卡的刷新周期是 1/80秒左右,具体数字可以自己设置的。这样问题就来了,一般画图都是先画背景色,然后再把内容画上去,如果这两次操作不在同一个刷新周期内完成,那么 阅读全文
posted @ 2013-11-06 13:46 DoubleLi 阅读(809) 评论(0) 推荐(0)

摘要:一、什么是虚拟列表控件虚拟列表控件是指带有LVS_OWNERDATA风格的列表控件。。二、为什么使用虚拟列表控件我们知道,通常使用列表控件CListCtrl,需要调用InsertItem把要显示的数据插入列表中,之后我们就不必关心数据在哪里了,这是因为控件自己开辟了内存空间来保存这些数据。现在假设我们要显示一个数据库,里面的信息量很大,有几十万条记录。通常有两种方法解决这个问题:1是仅仅在 ListCtrl中插入少量的数据,比如100个,然后通过[上一页][下一页]两个按钮进行控制,某一时刻显示的只是从xxx到xxx+100之间的记录。2是把所有数据全部插入到ListCtrl中,然后让用户通过 阅读全文
posted @ 2013-11-06 13:42 DoubleLi 阅读(742) 评论(0) 推荐(0)

摘要:包含透明色的位图的绘制方法有多种,最简单的方法是调用现成的函数:TransparentBlt,也可以通过自己的代码实现类似 TransparentBlt的功能,实现过程也有两种形式,一种是事先做一张掩码位图,另一种是动态生成掩码位图。本文将介绍动态生成掩码位图绘制具有 透明区域位图的方法。一、TransparentBlt 函数的使用TransparentBlt 函数在Windows98/Windows2000以上版本运行,系统中需要包含 Msimg32.dll,使用时可以链接 Msimg32.lib。Windows98下的TransparentBlt会产生资源泄漏,所以不建议在WIN98下使用 阅读全文
posted @ 2013-11-06 09:44 DoubleLi 阅读(454) 评论(0) 推荐(0)

摘要:由于项目中要实现子窗口的透明的功能,在网上找到了这一段提示:子窗口的透明和主窗口完全不同, 主窗口是通过layeredwindow实现的, 而子窗口则必须自己实现, 尤其是半透明, 必须自己对获取的透明背景图进行操作。 要实现子窗口的透明需要做到下面几步:1. windows的ExStyle中需要包含WS_EX_TRANSPARENT属性2. windows的Style中要去掉WS_CLIPSIBLING属性3. 对继承自windows标准控件的子窗口( 比如edit, scrollbar等等 ), 需要截获WM_CTLCOLORxxx消息并返回一个style为BS_HOLLOW的brush的 阅读全文
posted @ 2013-11-06 09:42 DoubleLi 阅读(1106) 评论(0) 推荐(0)

摘要:使用内存DC绘图,然后实现双缓冲,避免绘图闪烁,这个小技术简单但很有效。但是仍然有很多人说使用了双缓冲,图片却仍然有闪烁,分析了几个这样的例子,发现其实不是双缓冲的技术问题,而是使用者没有正确理解和使用双缓冲的方法。使用双缓冲要点如下:1. 保证绘图过程中的所有CDC及其继承类指向内存DC。在窗口或者视图中绘图,一般都是在OnDraw或者OnPaint事件中,但是有时根据需要绘图是通过调用其他类及函数完成比较复杂的绘制,在这些函数中,有时编写者会获取诸如CClientDC,然后绘图,此时的任何动作都会绕过缓冲区直接绘制到屏幕,从而造成闪烁。正确的做法是检查并修改所有绘图过程函数,避免直接获取C 阅读全文
posted @ 2013-11-04 12:48 DoubleLi 阅读(805) 评论(0) 推荐(0)

上一页 1 ··· 12 13 14 15 16 17 18 19 20 ··· 30 下一页