摘要:一、什么是虚拟列表控件虚拟列表控件是指带有LVS_OWNERDATA风格的列表控件。。二、为什么使用虚拟列表控件我们知道,通常使用列表控件CListCtrl,需要调用InsertItem把要显示的数据插入列表中,之后我们就不必关心数据在哪里了,这是因为控件自己开辟了内存空间来保存这些数据。现在假设我们要显示一个数据库,里面的信息量很大,有几十万条记录。通常有两种方法解决这个问题:1是仅仅在ListCtrl中插入少量的数据,比如100个,然后通过[上一页][下一页]两个按钮进行控制,某一时刻显示的只是从xxx到xxx+100之间的记录。2是把所有数据全部插入到ListCtrl中,然后让用户通过滚
阅读全文
随笔分类 - VC/MFC
摘要:最近因工作需求,需要自绘CTreeCtrl。由于原来从来没有自绘过,开始在网上搜索资料,查询(因此本文有些知识可能不全面,或许还有更好的办法来实现,还请大家多多指教。)经过一段时间的编写,终于写好了。在此,感谢网友bunpkin提供的实例参考。先贴上效果图,如果觉得还不错,那就继续往下看吧。如果觉得不行的,请飘过。如何你看见这句话我会很高兴,因为至少我写的东西对你还是有一点点的吸引了。在此谢过!很好,那现在让我们来说说为什么要自绘CTreeCtrl。我总结了以下2点需要自绘的情况。1.当系统自带的树形控件已不满足我们的要求时,我们需要自绘。就像上图一样我们需要在后面显示我们额外的图标。2.当你
阅读全文
摘要:在您决定开发 Windows 提供的常规免费自定义控件范围之外的控件之后,您必需确定自己的控件将有多少独到之处 — 在功能和外观两方面。例如,我们假定您正在创建一个类似于计速表的控件。由于公共控件库 (ComCtrl32.dll) 中没有类似的控件,您完全需要自己进行以下操作:编写所有控件功能需要的代码,进行绘制,默认终端用户的交互,以及控件与其父窗口之间需要的任意消息处理。(#add 两方面,公共控件库中没有类似的 完全重写; 只想调整公共控件功能,则可以部分修改) 另一方面,还包括一些您只想调整公共控件功能的情况。例如,我们假定您想创建一个屏蔽编辑控件,它只允许接受指定的字符。如果使用 .
阅读全文
摘要:定时器在Windows 的程序中的作用不可忽略,也随处可见。设定一个时间间隔每0.5秒或者1秒钟刷新一次时钟,这样就可以完成一个简单的电子钟程序。在不同的编程工具中定时器的用法也不同,Visual C++中也给我们提供了实现这种功能的方法,而且方法不只一种。在窗口类中是使用定时器比较很简单,用SetTimer()设置了定时器之后,并在Class Wizard中添加了WM_TIMER消息映射后,您就可以在映射函数OnTimer()中添加代码实现,来定时完成您的任务,而且还支持任意多个定时器,这种方法大家可能都会用。但是在非窗口的类中,使用定时器就没那么简单了,在类消息映射中就找不到OnTimer
阅读全文
摘要:在使用 VC、 VB、 Delphi等高级语言编写数据库应用程序时,往往需要用户自己在控制面板中配置 ODBC数据源。对于一般用户而言,配置 ODBC数据源可能是一件比较困难的工作。 而且,在实际应用中,用户往往要求在同一个应用程序中访问不同的数据源,因此采用一般的加载方法就有了无法克服的缺陷。为能在程序中完成这一工作,方便应用程序的使用,本文以 VC为开发环境介绍两种在应用程序中动态加载 ODBC系统数据源的方法。 方法一:修改注册表 设计思路 一般情况下,当用户在控制面板中配置好 ODBC数据源后, Windows系统便在注册表中加入了一些子键来存储用户的配置结果。当应用程序需要用...
阅读全文
摘要:从功能简单的数据库(如JetEngine)到复杂的大型数据库系统(如oracle),VC++6.0都提供了一些编程接口。本文主要介绍以下五种:1.ODBCAPI; 2.MFCODBC类; 3.MFCDAO类;(数据访问对象) 4.MFC的OLE/DB; 5.ActiveX数据对象(ADO)。1.开放数据库连接(ODBCAPI):提供了一个通用的编程接口,允许程序与多种不同的数据库连接。它为Oracle,SQLServer,MSExcel等都提供了驱动程序,使得用户可以使用SQL语句对数据库进行直接的底层功能操作。在使用ODBCAPI时,用户须引入的头文件为\"sql.h\"
阅读全文
摘要:MFC 分割窗体(Splitter Windows)<reference MSDN Microsoft Foundation Class Library and Templates TNO 029>文档描述MFC中的CSplitterWnd类,该类用来支持窗体的分割和管理分割后每一个子窗格(pane)的大小1 分割窗体风格(Splitter Styles)CSplitterWnd类支持2种不同风格的分割窗口1.1 静态分割(static splitter)分割的窗格(pane)在分割窗体(splitter window;)创建时创建,而且顺序,数量不会变化,分割控制条(Splitt
阅读全文
摘要:MFC中对话框的数据交换(DDX)和数据校验(DDV)<reference MFC TNO 26>DDX : dialog data exchangeDDV : dialog data validation文档描述MFC中的DDX DDV机制,如何使用DDX_和DDV_ 函数和定制自己的DDX_ ,DDV_函数;Dialog Data Exchange概要:对话框的数据交换不依赖于任何宏来实现,全部依赖于C++代码实现,唯一特别之处在于每一个对话框如果想处理自己的数据交互必须重载一个虚函数void CMyDialog::DoDataExchage(CDataExchage* pDX
阅读全文
摘要:MFC相关技术说明:<可参阅MSDN MFC TNO 3>Mapping of Windows Handles to ObjectsMFC对象与Win32 SDK句柄的映射关系说明: MFC使用C++对象封装Win32句柄(操作系统资源调度单元 HANDLE),所以在概念上一定要把MFC中的关于C++对象和WIN32句柄对象的概念区分开来,以下讨论就是MFC C++对象如何封装关联句柄相关函数与技术:1 FromHandle()FromHandle(HANDLE handle);//MFC 类成员的静态方法用于创建一个与句柄关联临时有效的MFC对象ie:CWnd *pWnd = C
阅读全文
摘要:我在学习中经常遇到要重写DrawItem()的情况,但又有一个WM_DRAWITEM消息,它们是什么样的关系呢。如果我们要重写一个CButton取名为CMyButton,我们可以重写CMyButton的DrawItem()函数来实现我们的需求,但CMyButton::DrawItem()是在什么时候调用呢?它是在它的宿主类的OnDrawItem()中被调用,OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct )正是对WM_DRAWiTEM的相应函数。宿主类可以根据nIDCtl来判定是哪个子控件。其实我们可以在OnDrawItem函.
阅读全文
摘要:一、定义一个CImageList m_ImageList;二、初始化加载图片列表:m_ImageList.Create(18, 18, ILC_COLORDDB | ILC_MASK, 0, 1);CBitmap camer;CBitmap camerg;camer.LoadBitmap(IDB_Video);camerg.LoadBitmap(IDB_VideoGroup);m_ImageList.Add(&camerg,RGB(192, 192, 192));m_ImageList.Add(&camer, RGB(192, 192, 192));m_TreeList.Set
阅读全文
摘要:MFC类库提供了CWnd::OnCtlColor函数,在工作框架的子窗口被重画时将调用该成员函数.因此可以重载WM_CTLCOLOR消息的响应函数.此函数的原型:afx_msg HBRUSH OnCtlColor(CDC *pDC,CWnd *pWnd,UINT nCtlColor); 参数nCtlColor用于指定控件的类型,可以是: .CTLCOLOR_BTN 按钮控件 .CTLCOLOR_DLG 对话框 .CTLCOLOR_EDIT 编辑框 .CTLCOLOR_LISTBOX 列表控件 .CTLCOLOR_MSGBOX 消息控件 .CTLCOLOR_SCROLLBAR 滚动条控件 .C.
阅读全文
摘要:基础知识 C标准函数集锦 标准C I/O函数 sizeof 用法 正确使用内存 有关c++ string类 堆和栈的区别[再转] C++中的异常(exception) API总结和断点函数 字符集和编码知识 高位优先与低位优先 do...while(0)的妙用 理解虚基类、虚函数与纯虚函数的概念 C之修炼 C代码优化方案 C++代码优化方法总结 VC:CString用法整理(转载) VC的若干实用小技巧 (如何干净的删除一个类) 指针 C++部分操作符 C++中const用法总结 VC定时器SetTimer函数 Shell中关于文件路径操作的API函数 调用DLL VC小...
阅读全文
摘要:GDI+接口是Microsoft Whistler操作系统中的一部分,它是GDI的一个新版本,不仅在GDI基础上添加许多新特性而且对原有的GDI功能进行优化。在为开发人员提供的二维矢量图形、文本、图像处理、区域、路径以及图形数据矩阵等方面构造了一系列相关的类,如Bitmap(位图类)、Brush(画刷类)、Color(颜色类)、Font(字体类)、Graphics(图形类)、Image(图像类)、Pen(画笔类)和Region(区域类)等。其中,图形类Graphics是GDI+接口中的一个核心类,许多绘图操作都可用它来完成。 我们首先介绍一下GDI+的新特性以及其编程方式的改变,然后介绍用V.
阅读全文
摘要:原文地址:http://blog.csdn.net/collin1211/article/details/2483316VC 项目中可以使用的路径宏:宏说明$(RemoteMachine)设置为“调试”属性页上“远程计算机”属性的值。有关更多信息,请参见更改用于 C/C++ 调试配置的项目设置。$(References)以分号分隔的引用列表被添加到项目中。$(ConfigurationName)当前项目配置的名称(例如“Debug”)。$(PlatformName)当前项目平台的名称(例如“Win32”)。$(Inherit)指定在由项目生成系统所撰写的命令行中,继承的属性出现的顺序。默认情况
阅读全文
摘要:1、画笔有两种形式创建画笔一是直接通过GetStockObject()函数来调用二是通过创建画笔来调用HPEN CreatePen( intfnPenStyle,// pen style intnWidth,// pen width COLORREFcrColor // pen color);创建画笔后必须调用SelectObject函数来将起选入设备环境;删除画笔可通过DeleteObject 函数来实现;2、画刷创建画刷一是通过GetStockObject函数来调用二是通过调用CreateSolidBrush 和CreateHatchBrush来创建画刷HBRUSH CreateSolid
阅读全文
摘要: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(
阅读全文
摘要:在windows系列上做编程,gdi是一个很重要的技术点,有很多程序在运行多次后出现异常,除了众所周知的内存泄露以外,gdi资源泄露也是一个很直接的原因.今天就把我自己在编程中总结的一些经验给大家分享,欢迎高手补充.1.Create出来的gdi对象,一定要用DeleteObject来释放,释放顺序是先Create的后释放,后Create的先释放.这里的Create指的是以它为开头的gdi函数,比如,CreateDIBitmap,CreateFont等等,最后都要调用DeleteObject来释放.2.Create出来的dc要用DeleteDC来释放,Get到的要用ReleaseDC释放.3.确
阅读全文
摘要:前一段在一个仿QQ的IM通讯工具中加入屏幕截图以及截图编辑功能,但是测试中发现当连续进行几十次截图后,系统会出现白屏,开始以为和win7经常闪白有关,屏幕截图截取到闪白的瞬间导致白屏,后来发现是GDI内存不足,申请不到GDI内存贴图失败所致。于是找了GDI泄露的工具,对程序进行GDI内存检测,下面就介绍两款GDI泄露检测工具的用法以及GDI编程的一些注意事项。第一款:GDIndicator 支持win7+xp 下载地址1、启动待检测的程序和GDIndicator,启动顺序没有要求,之后F5刷新,就能看到系统中所有进程,和使用的资源数找到想要查看的进程,这里我们的程序是 TPCommonCont
阅读全文
摘要:介绍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
阅读全文