MFC
codinglf
专注于视频直播行业,在这个行业基类了丰富的经验,热爱开源项目。
我坚信业精于勤,只有偏执狂才能真正的成功。
喜爱的开源项目有:ffmpeg、opencv、crtmpserver、obs-studio、nginx、redis、skynet、kbengine、protobuf等等。。。
我的博客:http://blog.csdn.net/windows_nt
展开
-
检测内存泄露的原理
检测内存泄漏的关键是要能截获住对分配内存和释放内存的函数的调用。截获住这两个函数,我们就能跟踪每一块内存的生命周期,比如,每当成功的分配一块内存后,就把它的指针加入一个全局的list中;每当释放一块内存,再把它的指针从list中删除。这样,当程序结束的时候,list中剩余的指针就是指向那些没有被释放的内存。这里只是简单的描述了检测内存泄漏的基本原理,详细的算法可以参见Steve Maguire转载 2013-03-08 21:05:29 · 5295 阅读 · 2 评论 -
语义的需要
断言 断言准确的说应该算是一门语言无关的技术,不过其在代码的编写中占有重要地位,不能不提。断言就是在代码的调试版时会由于一表达式的值而弹出警告对话框,但是在释放版时不造成任何影响。断言表示在其所在位置,对应表达式的值应该满足的条件,不是可以满足的条件。 断言的一般用途很多地方都说成是帮助调试。其实其用途和const变量及const成员函数一样,“帮助调试”只是其附加效果,它的真转载 2013-03-09 09:25:06 · 1142 阅读 · 0 评论 -
MFC界面包装类
MFC界面包装类——多线程时成员函数调用的断言失败 经常在论坛上看到如下的问题:DWORD WINAPI ThreadProc( void *pData ) // 线程函数(比如用于从COM口获取数据){ // 数据获取循环 // 数据获得后放在变量i中 CAbcDialog *pDialog = reintERPret_cast( p转载 2013-03-06 23:35:40 · 1842 阅读 · 0 评论 -
微软VC各版本BUG: error C2660: 'new' : function does not take 3 parameters
今天在用GDI+写程序时,有 HatchBrush * brushDotDiamond =newHatchBrush(HatchStyle25Percent,color);用VC6 SP6或VS2005编译错误为error C2660: 'new' : function does not take 3 parameters这是VC的一个BUG,微软至今还没有解除。解决办法如下:转载 2013-03-09 14:06:57 · 1047 阅读 · 0 评论 -
DDX_Control关联资源的原理
DDX_Control关联资源的原理DDX_Control函数管理着在对话框、表格视或控件视中被子类化的控件与对话框、表格视或控件视的CWnd数据成员之间的数据交换。其实说白了,就是将资源(如按钮)与类对象(CButton)关联在一起,也就是绑定起来。DDX_Control的使用:在对话框类头文件中定义m_btnOK对象CButton m_btnOK;然后在DoData原创 2013-03-06 23:54:33 · 5590 阅读 · 1 评论 -
AFX_EXT_CLASS
MFC扩展DLL是通常实现从现有Microsoft基础类库类派生的可重用类的DLL。 MFC扩展DLL具有下列功能和要求: 1。客户端可执行文件必须是用定义的_AFXDLL编译的MFC应用程序。 2。扩展DLL也可由动态链接到MFC的规则DLL使用。 3。扩展DLL应该用定义的_AFXEXT编译。这将强制同时定义_AF转载 2012-09-29 08:48:28 · 16422 阅读 · 0 评论 -
HICON与HBITMAP相互转换
将BMP转换成ICON图标方法一、HICON HICONFromCBitmap( CBitmap& bitmap){ BITMAP bmp; bitmap.GetBitmap(&bmp); HBITMAP hbmMask = ::CreateCompatibleBitmap(::GetDC(NULL), bmp.bmWidth, bmp.bmHei原创 2013-01-05 20:33:19 · 9964 阅读 · 4 评论 -
MFC常用操作
1、获取本程序的运行目录TCHAR AppPathName[MAX_PATH];HINSTANCE hwnd = AfxGetAppModuleState()->m_hCurrentInstanceHandle;GetModuleFileName(hwnd,AppPathName,MAX_PATH); CString strModulePath(AppPathName);int nBi原创 2012-12-05 10:44:09 · 994 阅读 · 0 评论 -
控件移动
GetClientRect的CRect是相对它的窗口的客户区的原点而言的,即它的左上角坐标总是(0,0),大小总是客户区的长宽。GetWindowRect得到的CRect则是相对于屏幕坐标而言的,它的左上角坐标就是窗口在屏幕上的左上角坐标,它的大小就是整个窗口的大小。ClientToScreen,可以把一个CPoint对象或CRect对象的坐标从客户区坐标系(以客户区左上角为原点)变换为屏原创 2012-12-29 01:12:04 · 1441 阅读 · 0 评论 -
CListCtrl
m_list.SetItemState(nIndex,LVIS_FOCUSED | LVIS_SELECTED,LVIS_FOCUSED | LVIS_SELECTED);注意:这句代码只是让指定行高亮显示,如果使用后再用GetSelectionMark函数来得到选中行,结果往往是错误的。比如,先用鼠标点击选中第5行,调用GetSelectionMark函数得到的是4(第5行),再调用SetI转载 2012-11-21 08:20:24 · 913 阅读 · 0 评论 -
模式与非模式对话框的种种
模式和非模式对话框都共用同一个基类CDialog,但是它们的创建和销毁却都不相同。接下来,说说它们具体有那些不同。首先从创建开始:模式对话框通过DoModal来创建,构造函数要以资源ID作为参数。无模式对话框通过Create创建,默认构造函数可以无参数。virtual int DoModal();函数返回可以是IDOK或IDCANCELBOOL Create(UINT原创 2013-03-09 22:01:24 · 2716 阅读 · 0 评论 -
MFC中的线程与消息
1、MFC程序的进入点其实是WinMain,源代码如下:extern "C" int WINAPI_tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow){ // call shared/exported WinMain return AfxWinMain(hIn原创 2013-05-08 23:46:42 · 1642 阅读 · 0 评论 -
vs中检测内存泄漏的方法
使用vs的内存检测有以下几种方法。在debug模式下以F5运行:方法一:#define CRTDBG_MAP_ALLOC #include #include //在入口函数中包含 _CrtDumpMemoryLeaks(); //即可检测到内存泄露//以如下测试函数为例:int main(){ char* pChars = new cha原创 2013-03-08 21:44:04 · 45000 阅读 · 4 评论 -
在工程中添加内存泄漏检测功能
在前几篇文章中讲述了如何使用vs自带的内存泄漏检测功能,实现起来很简单,也很实用,但却不强大。今天我给大家介绍一种新的内存泄漏检测方法,通过外接工具检测内存泄漏。VLD工具概述Visual Leak Detector(VLD)是一款用于Visual C++的免费的内存泄露检测工具。他的特点有:可以得到内存泄漏点的调用堆栈,如果可以的话,还可以得到其所在文件及行号; 可以得到原创 2013-04-23 23:44:30 · 1409 阅读 · 0 评论 -
mfc常见的界面库
Xtrme toolkit,BCGControlBar,SkinMagic,AppFace,Skin++,Uskin++,SYGUI,LibUIDK,GuiToolkit,GardenUI等等,除了后两种一个是开源,一个是免费的外,其余的都是收费的。The Ultimate Toolboxhttp://www.codeproject.com/KB/MFC/Ultimat转载 2013-11-05 17:56:11 · 1528 阅读 · 0 评论 -
vs目录(继承的值)配置
突然间,想在vs中添加自己的目录,这样以后再新建项目后,就不用再麻烦的手动添加了,比如让新建的项目都继承我的目录D:\MyInc。事例:让新建的工程包含的目录中自动继承目录D:\MyInc修改它的方法如下:1、首先添加环境变量,变量名:MyInc,值:D:\MyInc。如下图2、配置vs编译器打开如下目录:win7C:\Users\Administrator\App原创 2013-10-13 10:05:48 · 5067 阅读 · 0 评论 -
win32多线程-在MFC程序中使用多线程
1、基础知识介绍 使用mfc的道友,应该很清楚,在mfc程序中创建多线程时,应该调用mfc中为我们设计好的线程接口函数AfxBeginThread(),原因是这个接口为我们做好了mfc函数和数据的初始化工作,如果你的mfc多线程中不使用任何mfc函数或数据,你也可以不用此函数来创建多线程。好了,进入正题,我来介绍一下用AfxBeginThread()创建worker线程和UI线程的两种调原创 2013-08-04 23:55:15 · 5226 阅读 · 0 评论 -
BCG界面库在VC工程中的应用步骤
BCG界面库在VC工程中的应用步骤(2008-12-08 16:19:26)BCGControlBar Library Professional Edition installation:整个库的源代码安装在\BCGCBPro 目录下面.可执行文件(*.dll)安装在 \Bin (for VisualStudio 6.0)或\Bin7 (for VisualStudio .NET)转载 2013-03-01 18:46:41 · 1312 阅读 · 1 评论 -
加载图片汇总
用MFC做GDI开发的朋友肯定熟悉CBitmap类,该类封装了HBITMAP对象,简化了关于HBITMAP的API操作,如LoadBitmap方法可直接加载资源中指定ID的图片,但是很多情况下我们需要从文件中加载图片,CBitmap类就没有提供这样的方法。1、使用API函数LoadImage,指定LR_LOADFROMFILE标志。如:HBITMAP hBitmap = (HBITMA原创 2012-11-27 16:31:00 · 2304 阅读 · 0 评论 -
显示图片汇总
显示图片汇总上一章总结了加载图片的几种方法,这章我总结一下显示图片的几种常用方法,希望对各位有所帮助1、用Picture控件显示图片1、首先添加Picture控件,ID为IDC_IMG_BTM2、定义 CBitmap* m_pBitmap;3、导入图片,并定义ID为IDB_TEST_IMG4、动态加载代码如下: CStatic* pImage = (CStati原创 2013-06-16 23:07:56 · 1642 阅读 · 0 评论 -
windows程序中添加皮肤库
程序中使用皮肤库很简单,步骤如下:1、把以下文件拷贝到你的程序目录下SkinPlusPlusDLL.lib、SkinPlusPlusDLL.dll、SkinPlusPlus.h、Minimized.ssk、XPCorona.ssk、SoftCrystal.ssk.ssk后缀的文件代表三种皮肤库文件2、包涵头文件,链接SkinPlusPlusDLL.lib,比如:在StdAfx.原创 2013-05-09 08:43:27 · 2696 阅读 · 4 评论 -
BlockInput屏蔽鼠标键盘消息
typedef BOOL (__stdcall *PFNBlockInput)(BOOL fBlockIt);HMODULE hModule = GetModuleHandle ( "user32.dll" ) ;if ( hModule == NULL ){hModule = LoadLibrary("user32.dll");}if(hModule){PFNBlockInpu转载 2012-11-16 15:46:14 · 5771 阅读 · 0 评论 -
关闭Win7的玻璃效果
关闭Win7的玻璃效果文章出自:blog.csdn.net/windows_ntDwmEnableComposition调用这个函数可关闭整个系统的玻璃效果DwmSetWindowAttribute调用此函数可关闭某个窗口的玻璃效果只适用xp以上系统,因为xp系统没有dwmapi.dll这个链接库 以下代码放在程序的BOOL CXXApp::InitInstance()中调原创 2012-11-12 17:00:51 · 6267 阅读 · 0 评论 -
文件读写和注册表读写
文件读写和注册表读写添加如下菜单项目:响应代码:一、 文件读写void CFileView::OnFileWrite(){ // TODO:在此添加命令处理程序代码 //读写方式虽然是成对提供给程序员的,但是并不要求对应使用,文件的操作是对文件本身的操作,不关心文件的产生 //方法一:C语言函数 /转载 2012-11-24 14:15:24 · 810 阅读 · 0 评论 -
用VS编译VC6.0程序时常遇到的问题
最近开发平台由VC6.0升级至VS2005,需要将原有的项目迁移,特将碰到的问题归纳如下:1消息映射VS2005对消息的检查更为严格,以前在VC6下完全正常运行的消息映射在VS2005下编译不通过a. ON_MESSAGE(message,OnMyMessage); OnMyMessage返回值必须为LRESULT,其形式为:afx_msg LRESULT OnMyMessag转载 2012-04-03 22:52:05 · 1428 阅读 · 0 评论 -
MFC入门学习
基础知识而32位的系统中每一运行的程序都会有一个消息队列,所以系统可以在多个消息队列中转换而不必等待当前程序完成消息处理就可以得到控制权。这种多任务系统就称为抢先式的多任务系统。Windows95/NT就是这种系统。1、开发需要读写文件的应用程序并且有简单的输入和输出可以利用单文档视结构。2、开发注重交互的简单应用程序可以使用对话框为基础的窗口,如果文件读写简单这可利用CFile进行。原创 2012-04-01 18:16:00 · 939 阅读 · 0 评论 -
VC++.NET 技术内幕学习四
第十六章、读和写文档知识点:序列化流程持续文档对象SerializeCArchive归档对象CFile对象磁盘你在Serialize函数中需要做的就是,将数据存到归档对象中或从归档对象中取出。在打开或保存的处理过程中,应用程序框架会调用文档的Serialize函数。 可序列化的类必须直接或间接地从CObject派生而来,并且在类声明中,必须包含D原创 2012-03-31 13:30:08 · 787 阅读 · 0 评论 -
VC++.NET 技术内幕学习三
第十五章、文档与视图的分离CView::GetDocument();非虚函数。返回的是指向文档的指针。当MFC产生CView的派生类时,它同时也创建类型安全的GetDocument函数,该函数返回一个指向派生文档类的对象的指针。当在视图类中遇到对GetDocument函数的调用时,调用的是CMyView::GetDocument(返回的是CMyDocument*),因此,你不用再将它返回的原创 2012-03-31 13:26:43 · 1008 阅读 · 1 评论 -
VC++.NET 技术内幕学习二
第十一章、windows消息处理和多线程编程 Windows提供了两种线程:辅助线程和用户界面线程。用户界面线程有窗口,因此它有自己的消息循环,辅助线程没有窗口,没有自己的消息循环。主线程无法通过消息和辅助线程通信,简单的解决办法是通过全局变量通信。辅助线程可以通过消息和主线程通信,尽量选择post消息,在模式对话框中使用send消息会出问题。 使原创 2012-03-31 13:19:47 · 832 阅读 · 0 评论 -
MFC中常用数据类型转换
刚接触VC编程的朋友往往对许多数据类型的转换感到迷惑不解,本文将介绍一些常用数据类型的使用。我们先定义一些常见类型变量借以说明 int i = 100; long l = 2001; float f=300.2; double d=12345.119; char username[]转载 2012-04-03 23:11:50 · 10000 阅读 · 0 评论 -
MFC常用控件二
Combo Box组合窗口是由一个输入框和一个列表框组成。创建一个组合窗口可以使用成员函数:BOOL CListBox::Create( LPCTSTR lpszText, DWORD dwStyle, const RECT& rect,CWnd* pParentWnd, UINT nID = 0xffff );其中dwStyle将指明该窗口的风格,除了子窗口常用的风格WS_C转载 2012-04-01 18:35:41 · 1302 阅读 · 0 评论 -
MFC窗口的常用操作
General Window从VC提供的MFC类派生图中我们可以看出窗口的派生关系,所有的窗口类都是由CWnd派生。所有CWnd的成员函数在其派生类中都可以使用。本节介绍一些常用的功能给大家。改变窗口状态:BOOL EnableWindow( BOOL bEnable = TRUE );可以设置窗口的禁止/允许状态。BOOLIsWindowEnabled( );可以查询窗口的禁止/转载 2012-04-01 18:37:36 · 1201 阅读 · 0 评论 -
线程与消息队列
当一个线程第一次被创建时,系统假定线程不会用于任何与用户相关的任务。这样可以减少线程对系统资源的要求。但是,一旦该线程调用一个与图形用户界面有关的函数 (如检查它的消息队列或建立一个窗口 ),系统就会为该线程分配一些另外的资源,以便它能够执行与用户界面有关的任务。特别是,系统分配了一个THREADINFO结构,并将这个数据结构与线程联系起来。THREADINFO结构体如下: 1.将消息转载 2012-03-30 16:43:12 · 2081 阅读 · 0 评论 -
VC++.NET技术内幕学习一
第五章消息映射遇到的问题:一、映射模式。坐标使用的经验规则:1、 可以认为CDC的所有成员函数都以逻辑坐标作为其参数。2、 可以认为CWnd的成员函数都以设备坐标作为其参数。3、 所有点中测试(hit-test)操作都应该考虑设备坐标。区域的定义应采用设备坐标。某些像CRect::PtInRect之类的函数只有在采用设备坐标参数时才会保证有正确的结果。4、 将一原创 2012-03-31 11:42:27 · 980 阅读 · 0 评论 -
用MFC实现窗体透明
使用SetLayeredWindowAttributes可以方便的制作透明窗体,此函数在w2k以上才支持,而且如果希望直接使用的话,可能需要下载最新的SDK。不过此函数在w2k的user32.dll里有实现,所以如果你不希望下载巨大的sdk的话,可以直接使用GetProcAddress获取该函数的指针。以下是MSDN上的原内容,我会加以解释。The SetLayeredWindowAt原创 2012-04-24 22:38:33 · 11038 阅读 · 1 评论 -
C++操作注册表
C++操作注册表 3.1. CRegKey 类及主要使用和函数说明所需要头文件:atlbase.h 常用函数(1) 打开一个键的函数:1RegOpenKeyEx函数定义:LONG RegOpenKeyEx(HKEY hKey,//已经打开的键的句柄,或者直接是上述几个根键 LPCTSTR转载 2012-11-25 13:46:24 · 1257 阅读 · 0 评论 -
全局变量的定义
全局变量一般这样定义:1。在一类的.cpp中定义 int myInt;然后再在要用到的地方的.cpp里extern int myInt;这样就可以用了。 2。在stdafx.cpp中加入:int myInt;然后在stdafx.h中加入:extern int myInt这样定义以后无论在什么文件中都是可见的. 3。比较规范的是,先定义一个Glbs.h,把所有转载 2012-04-11 23:18:05 · 5076 阅读 · 0 评论 -
Custom Control
VC里的Custom Control的使用很简单,用鼠标拖动到窗体上,然后设置其“Class”属性为已注册的窗口类,比哪Edit、Button等等。因为像Edit、Button等控件可以很容易的画到窗体上,而对继承于CWnd的自定义窗口类则没有办法直接用鼠标画到窗体上,这时Custom Control就用上了,只要类是使用RegisterClass注册后就能被使用,如:view plainco转载 2012-10-08 16:04:06 · 3063 阅读 · 0 评论 -
CCheckListBox控件
1.CCheckListBox效果 CCheckListBox是由CListBox派生,具有CListBox的所有功能。与CListBox唯一不同是在每一行前面加上了一个检查框(Check Box)。2.CCheckListBox的rc设置要使用CCheckListBox,需要在资源视图(resourceview)中(1) Style->Owner draw->选中Fixe转载 2012-09-17 17:51:13 · 6814 阅读 · 0 评论 -
TAB控件实例
VC之TAB控件实例 1.在主面板上拖放一Tab Control控件,我们这里建立其在主面板类(CTabSampleDlg)里面的成员变量m_tab。2.添加两个子对话框,设置属性Style设置为child,Border设置为none。这里要注意了,添加的必须是继承自DIALOG类的对话框,而不是PropPage对话框,否则的话,子面板将不能响应用户操作。然后生成两个新类“CTabPa原创 2012-07-19 08:57:21 · 884 阅读 · 0 评论