DoubleLi

qq: 517712484 wx: ldbgliet

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

2013年3月22日

摘要: 1、画笔有两种形式创建画笔一是直接通过GetStockObject()函数来调用二是通过创建画笔来调用HPEN CreatePen( intfnPenStyle,// pen style intnWidth,// pen width COLORREFcrColor // pen color);创建画笔后必须调用SelectObject函数来将起选入设备环境;删除画笔可通过DeleteObject 函数来实现;2、画刷创建画刷一是通过GetStockObject函数来调用二是通过调用CreateSolidBrush 和CreateHatchBrush来创建画刷HBRUSH CreateSolid 阅读全文
posted @ 2013-03-22 19:56 DoubleLi 阅读(611) 评论(0) 推荐(0)

摘要: HBITMAP CopyDCToBitmap(HDC hScrDC, LPRECT lpRect){if(hScrDC==NULL || lpRect==NULL || IsRectEmpty(lpRect)){ AfxMessageBox("参数错误");return NULL;}HDC hMemDC;// 屏幕和内存设备描述表HBITMAP hBitmap,hOldBitmap;// 位图句柄int nX, nY, nX2, nY2;// 选定区域坐标int nWidth, nHeight;// 位图宽度和高度// 确保选定区域不为空矩形if (IsRectEmpty( 阅读全文
posted @ 2013-03-22 19:50 DoubleLi 阅读(939) 评论(0) 推荐(0)

摘要: 在windows系列上做编程,gdi是一个很重要的技术点,有很多程序在运行多次后出现异常,除了众所周知的内存泄露以外,gdi资源泄露也是一个很直接的原因.今天就把我自己在编程中总结的一些经验给大家分享,欢迎高手补充.1.Create出来的gdi对象,一定要用DeleteObject来释放,释放顺序是先Create的后释放,后Create的先释放.这里的Create指的是以它为开头的gdi函数,比如,CreateDIBitmap,CreateFont等等,最后都要调用DeleteObject来释放.2.Create出来的dc要用DeleteDC来释放,Get到的要用ReleaseDC释放.3.确 阅读全文
posted @ 2013-03-22 16:39 DoubleLi 阅读(504) 评论(0) 推荐(0)

摘要: 前一段在一个仿QQ的IM通讯工具中加入屏幕截图以及截图编辑功能,但是测试中发现当连续进行几十次截图后,系统会出现白屏,开始以为和win7经常闪白有关,屏幕截图截取到闪白的瞬间导致白屏,后来发现是GDI内存不足,申请不到GDI内存贴图失败所致。于是找了GDI泄露的工具,对程序进行GDI内存检测,下面就介绍两款GDI泄露检测工具的用法以及GDI编程的一些注意事项。第一款:GDIndicator 支持win7+xp 下载地址1、启动待检测的程序和GDIndicator,启动顺序没有要求,之后F5刷新,就能看到系统中所有进程,和使用的资源数找到想要查看的进程,这里我们的程序是 TPCommonCont 阅读全文
posted @ 2013-03-22 16:26 DoubleLi 阅读(692) 评论(0) 推荐(0)

摘要: 介绍CPen* SelectObject( CPen* pPen );CBrush* SelectObject( CBrush* pBrush );virtual CFont* SelectObject( CFont* pFont );CBitmap* SelectObject( CBitmap* pBitmap );int SelectObject( CRgn* pRgn );CGdiObject* SelectObject( CGdiObject* pObject );函数功能:该函数选择一对象到指定的设备上下文环境中,该新对象替换先前的相同类型的对象。函数原型:HGDIOBJ Selec 阅读全文
posted @ 2013-03-22 15:00 DoubleLi 阅读(4532) 评论(0) 推荐(0)

摘要: 所谓窗口子类化:改变一个已经存在的窗口实例的性质:消息处理与其他实例属性。通常在SDK中所谓的窗口子类化就是改变一个窗口函数(如GetWindowLong()和SetWindowLong())通过这两个函数来设置窗口的属性等;而今天我们主要内容是介绍MFC中的子类化,它跟SDK中的子类化不太一样:所有MFC窗口有相同的窗口函数,由该窗口函数根据窗口句柄查找窗口实例,在把消息映射到该窗口类(class)得消息处理函数上。为了利用MFC的消息映射机制,不宜改变窗口函数(名),MFC也把子类化封装在函数SubclassWindow()中。#include "Subclass.h" 阅读全文
posted @ 2013-03-22 12:45 DoubleLi 阅读(896) 评论(0) 推荐(0)

摘要: 对开发中常见的内存泄露,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 阅读全文
posted @ 2013-03-22 10:45 DoubleLi 阅读(844) 评论(0) 推荐(0)