摘要:所谓窗口子类化:改变一个已经存在的窗口实例的性质:消息处理与其他实例属性。通常在SDK中所谓的窗口子类化就是改变一个窗口函数(如GetWindowLong()和SetWindowLong())通过这两个函数来设置窗口的属性等;而今天我们主要内容是介绍MFC中的子类化,它跟SDK中的子类化不太一样:所有MFC窗口有相同的窗口函数,由该窗口函数根据窗口句柄查找窗口实例,在把消息映射到该窗口类(class)得消息处理函数上。为了利用MFC的消息映射机制,不宜改变窗口函数(名),MFC也把子类化封装在函数SubclassWindow()中。#include "Subclass.h"
阅读全文
随笔分类 - VC/MFC
摘要:对开发中常见的内存泄露,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
阅读全文
摘要:本文配套程序下载地址为:http://download.csdn.net/detail/morewindows/5128654转载请标明出处,原文地址:http://blog.csdn.net/morewindows/article/details/8634451欢迎关注微博:http://weibo.com/MoreWindows前面已经有六篇文章介绍了Windows界面编程,目录如下:1.《Windows界面编程第一篇位图背景与位图画刷》2.《Windows界面编程第二篇半透明窗体》3.《Windows界面编程第三篇异形窗体普通版》4.《Windows界面编程第四篇异形窗体高富帅版》5.《
阅读全文
摘要:晚上在博客堂读完VSTO写的一篇文章,介绍了CodePlex上面的一个项目,叫做“All-In-One Code Framework”,代号CodeFx,简单的说,就是收集了几乎所有常见的微软开发技术的示例项目,将其打包到这个框架里,而且还使用各种不同的语言进行实现。比如创建一个ActiveX控件和COM组件,CodeFx里面使用ATL、MFC、VB、C#来实现同样的功能。 适合新手入门,也可以作为一份模板供经验丰富的开发者使用,可节省大量的时间。官方网站上给出了框架的基本结构,如下图所示:COM组件和ActiveX控件示例数据访问示例 库示例进程间通信示例花了2个小时粗略阅读了代码,记录下学
阅读全文
摘要:一般的vc++做的程序,效率较高,但是对界面要么开发速度慢,要不做出来的不是很漂亮。如何呢?提供两个方法供参考。1. 使用界面库比较常用不错的一个是BCG, 一个是xtreme toolkit.另外vs2008已经内置BCGxtreme toolkit这个界面库,带的例子比较多,而且是分开的,每个控件都分开有一个例子。方便使用。用bcg的直接用vc2008好了。下载一个package,里面直接集成BCG.2. 使用Python+wxPython,使用Eclipse+PyDev 作为集成开发环境,发布时使用Py2exe进行打包,vc主要写不带界面的内核或逻辑模块。python也是google 三
阅读全文
摘要:我们打包基于VC++开发的应用程序,我们会一同打包一个VC运行库,否则安装到一些非开发环境中,你的应用程序依然可以正确运行。Visual C++ 2008 Redistributable Package 包括了(VCRedist_x86.exe,VCRedist_x64.exe以及VCRedist_ia64.exe)。就是一个简单的VCRedist.exe安装集成,结果下载了之后安装,安装完成后在系统或某个盘的根目录下留下一堆的临时文件:临时文件列表调查后发现,这是Microsoft Visual C++ 2008 Redistributable Package的一个已知Bug,微软在SP1中
阅读全文
摘要:用VS2008 SP编写的MFC程序,拷贝到其他没装VS2008的机器上直接运行,肯定是不行的。即使选择静态链接MFC,有时候系统还是会提示“应用程序配置不正确”。这是因为程序中可能不止用到了9.0版本MFC,还可能有ATL、CRT、OPENMP等。在自己的机器上运行时,系统会到"C:/WINDOWS/WinSxS/"文件夹查找相应的库,这个文件夹里包含了所有安装过的版本的运行库和清单文件。如果只找9.0版本的库和清单文件,也可以到"C:/Program Files/Microsoft Visual Studio 9.0/VC/redist/x86"这个
阅读全文
摘要:使用VS2008编译了一个程序,使用到自己编译的DLL,丢到某些机子上无法运行,提示“由于应用程序配置不正确,应用程序未能启动”的错误,装了vcredist_x86也没有用,开始以为是DLL的问题,后来换个简单的程序,仍然不行,百撕不得其解,后来上网找,下面有说了很多解决办法。 我最终的解决办法是复制本机中的.manifest文件,修改里面的版本号,复制到提示错误的机子上,与可执行程序放在同一目录就可以了。在计算机中管理的系统工具,事件查看器可以查看应用程序的消息,找到“由于应用程序配置不正确,应用程序未能启动”相关的错误,有那个版本号。修改.manifest文件中version的版本...
阅读全文
摘要:Howto: Deploy VC2008 apps without installing vcredist_x86.exeThere are several reasons for xcopy deployment of an application (also known as application local). One main reason is that you are independent of what the target computer has installed.Also your application always uses the “correct” (or b
阅读全文
摘要:对话框上的按钮本身只能添加单击双击时间,不能响应鼠标按下与弹起消息,可以通过两种方法实现:1.重载CButton类,将该类子类化 在工程中添加一个新类CMyButton,基类为CButton。 在对话框MyDlg中为IDC_BUTTON添加变量,在变量类型里选择CMyButton,变量名自定义,如m_myButton。添加函数OnDown与OnUp函数响应按钮按下与弹起消息 在Class name中选择CMyButton,然后添加WM_LBUTTONUP,WM_LBUTTONDOWN消息映射函数。添加代码如下:void CMyButton::OnLButtonUp(UINT nFlags, .
阅读全文
摘要:一:什么时候才会发生重绘窗口的消息? 当需要更新或重新绘制窗口的外观时,应用程序就会发送WM_PAINT消息。对窗口进行重新绘制。 二:Invalidate() -- RedrawWindow() -- UpdateWindow()三个函数有什么异同? Invalidate()是强制系统进行重画,但是不一定就马上进行重画。因为Invalidate()只是通知系统,此 时的窗口已经变为无效。强制系统调用WM_PAINT,而这个消息只是Post就是将该消息放入消息队列。当执行到WM_PAINT消息时才会对敞口进行重绘。 UpdateWindow只向窗体发送WM_PAINT消息,在发送之前判断G..
阅读全文
摘要:1.综述在MFC中CImageList类封装了图像列表控件的功能,图像列表是一个具有相同大小的图像(可以是不同类型)的集合,其主要用于应用程序中大规模图标的存储。该控件是不可见的,通常与其它如CListBox,CComboBox,CComboBoxEx,CTabCtrl以及CTreeCtrl一起使用,为他们提供图标资源。图象的每个集合中均以0为图象索引基数,可以把这些图标看成是以数组方式存储的,图像列表通常由大图标或位图构成,其中包含位图模式。实际上,所有的在同一个图象列表中的图标都被存储在一个屏幕设备的位图中。2.添加图像的两种方法通常可以向CImageList对象中添加位图和图标资源。其.
阅读全文
摘要:方法一: 单选的情况下GetNextItem(-1,LVIS_SELECTED); 方法二:单选的情况下不知道你的CListCtrl是否允许多选,如果只允许单选,你只需要调用成员函数GetSelectionMark()就可以获取选中的行号,然后你再调用GetItemText()就可以获取选中行的文本。方法三: 可以多选的情况下CString str;POSITION pos=list.GetFirstSelectedItemPosition(); //pos选中的首行位置if(pss==NULL) AfxMessageBox(L"no item were selected!"
阅读全文
摘要:在基于对话框的程序中,默认是没有这个消息的。 1、按下Ctrl+W,弹出类向导对话框,选择Class Info标签; 2、在Message fileter下拉列表中选择Window,然后再点击Message Maps标签; 3、这时就出现WM_DROPFILES消息了,添加该消息的响应函数。 [cpp] view plaincopyprint?void CDragDlg::OnDropFiles(HDROP hDropInfo) { // TODO: Add your message handler code here and/or call default CDialog::OnD...
阅读全文
摘要:在VC++中想加入自定义消息,以下方法可供参考 …… 1、首先定义消息:[cpp] view plaincopyprint?#define WM_MYMESSAGE (WM_USER+100) #define WM_MYMESSAGE (WM_USER+100) 2、在.h头文件中,加入消息响应函数: [cpp] view plaincopyprint?LONG OnMyMessage(WPARAM wParam, LPARAM lParam); LONG OnMyMessage(WPARAM wParam, LPARAM lParam); 该函数有规定的格式:[cpp] view p...
阅读全文
摘要:关于实用又方面“可编辑CListCtrl类”我之前也找了许久,终于被我找到了,与前面一篇那个效果一模一样... 1、使用说明 本文对CListCtrl控件进行了一个扩展,使它即可以编辑主项(Item),又可以编辑子项(SubItem),并尽量符合CListCtrl的操作习惯。 大家都知道在MFC中通过给CListCtrl设置LVS_EDITLABELS属性,并且在程序中响应控件的LVN_ENDLABELEDIT消息可以修改列表控件每一行的第一项,也就是主项(Item)。代码如下 :[cpp] view plaincopyprint?void CEditListCtrlSampleDlg:...
阅读全文
摘要:在这之前我一直在使用MFC框架,现在要学习WTL似乎有些牵强...... 俗话说得好:“工欲善其事,必先利其器”,还是先将基本术语搞清楚吧! 1、STL 即 Standard Template Library STL(标准模板库)是惠普实验室开发的一系列软件的统称。它是由Alexander Step
阅读全文
摘要:1、第一种方法:用微软提供的官方文档From : http://support.microsoft.com/kb/181934/en-us/ Generally, when you want to display a message box for a limited amount of time, you must implement a regular dialog box that closes itself after a specified amount of time. The problem with this method is that you lose the stand.
阅读全文
摘要:如果你是一个使用VB编程的程序员,要在程序中显示JPG或者GIF图像简直易如反掌,将图像控件拖到Form中,分分钟即可搞掂。但是C++程序员要显 示同样的图形却没有那么轻松,那么是不是要自己编写JPG解压缩代码呢?当然不用那么复杂啦!本文将针对这个问题讨论如何在MFC中显示JPG或者GIF 图像。 用VB写图像显示程序之所以如此轻松,完全是利用了琳琅满目的图像处理控件,把你想要做的事情都一一搞掂。而C++程序员为了实现相同的功能必须忙 乎半 天。其实,C/C++程序员也能使用那些VB程序员所用的(或者说几乎一样的)图像控件。VB用的图像控件实际上都基于一个系统级COM类—— IPicture.
阅读全文
摘要:一、 本文介绍一个CButton的派生类CLinkButton,用此派生类制作的按钮具有以下特点: 1、按钮的外观类似静态控件类CStatic 产生的对象。(参见图一) 图一 2、当鼠标的光标移到按钮上,但并未按下时,光标改变形状,字体改变形状;按钮类似应用在工具条和菜单上的扁平钮效果。(参见图二) 图二 3、当按钮按下的情形:(参见图三) 图三 二、下面具体描述这种按钮的实现方法和步骤: 在VC6的IDE环境中,生成一个基于对话框的PROJECT。 将对话框资源中按钮的属性页打开,在“Style”标签页中选取按钮的“Owner Draw”(自绘)属性。 将光标引入到应用程序的资源中。 ...
阅读全文