VC++/MFC
文章平均质量分 78
利白
这个作者很懒,什么都没留下…
展开
-
VC++内存泄漏检测方法(6):介绍deleaker和heob两款软件,其中heob在QtCreator有集成
我的这个系列的文章竟然可以写到第6篇。(#^.^#)最近又从网上了解到了两款软件,可以检测内存泄漏。本文重点介绍heob这款,因为它不仅免费,而且还和Qt Creator配合得比较好。原创 2024-08-30 11:09:14 · 504 阅读 · 0 评论 -
VS2017使用utf-8+BOM的编码格式
VS2017默认隐藏了【高级保存选项】,所以无法直接去设置编码UTF-8+BOM。我们需要先把【高级保存选项】调用出来:1、VS2017主菜单-工具-自定义;添加命令,高级保存选项。2、VS2017主菜单-文件-高级保存选项...原创 2020-08-31 16:47:06 · 2976 阅读 · 0 评论 -
MFC获取各个窗口(体)之间的指针(对象)
MFC在很多的对话框操作中,我们经常要用到在一个对话框中调用另一个对话框的函数或变量.可以用如下方法来解决.HWNDhWnd=::FindWindow(NULL,_T("Sphere")); //得到对话框的句柄C***Dialog* pWnd= (C***Dialog*)C***Dialog::FromHandle(hWnd);//由句柄得到对话框的对象指针pWnd->xx...转载 2020-04-03 12:09:59 · 1430 阅读 · 0 评论 -
使用正则表达式统计VS2017项目的代码量(统计源码总行数)
1、VS2017打开查找对话框,输入以下内容:正则表达式:b*[^:b#/]+.*$查找以下文件类型:*.cpp;*.h2、最终的查找结果,如图所示:原创 2020-02-01 10:31:08 · 650 阅读 · 0 评论 -
dump系列(2)C++程序异常或内存错误,导致闪退的解决办法:分析dump文件
如何在发布后程序中捕获程序的崩溃和异常往往是比较麻烦的事情,一般采用日志记录的方法来记录程序运行的每个流程,但是通常为了程序运行的性能,日志记录的方法只是记录程序运行的每个主要的处理流程,不能进行具体详细的记录,比如for 循环中的崩溃记录。C++语言中调用window API函数CreateFile()和MiniDumpWriteDump(),可以方便的记录程序崩溃时的Dump信息,并保持dum...原创 2020-01-28 21:55:14 · 4053 阅读 · 0 评论 -
VC++内存泄漏检测方法(5):使用强大的Windbg工具,重点是Symbols Path设置
前面4篇文章提到的方法,已经可以解决我们的大部分内存泄露问题了,但是这些方法是有前提的,那就是一定要有源代码,而且还只能是Debug版本调试模式下。实际上很多时候,我们的程序会用到第三方没有源代码的模块,有些情况下模块有内存泄露,但是没有证据,又或者VC++ MFC退出提示有内存泄漏,但是信息不足,不好定位是哪个文件哪个函数出问题,我们该怎么办? 这时我们就要依靠无所不能的WinDbg了。不了......原创 2020-01-26 15:26:42 · 3332 阅读 · 0 评论 -
VC++内存泄漏检测方法(4):【第1篇的补充说明】详解基于Crt的内存泄漏检测
#ifdef _DEBUG#define DEBUG_CLIENTBLOCK new( _CLIENT_BLOCK, __FILE__, __LINE__)#else#define DEBUG_CLIENTBLOCK#endif#define _CRTDBG_MAP_ALLOC#include <crtdbg.h>#ifdef _DEBUG#define new ...转载 2020-01-24 22:06:53 · 1264 阅读 · 0 评论 -
VC++内存泄漏检测方法(2):Checkpoint/DumpStatistics
MFC工程,全部在App中完成1.在 App.h 头文件声明#define MEMORY_STATE#ifdef MEMORY_STATEprivate: CMemoryState m_msOld; CMemoryState m_msNew; CMemoryState m_msDiff;#endif // MEMORY_STATE2.在 App::InitInstanc...原创 2020-01-23 11:39:45 · 1096 阅读 · 0 评论 -
VC++内存泄漏检测方法(1):_CrtSetDbgFlag与_CrtDumpMemoryLeaks,同样适用Qt Creator
VS使用MFC开发项目的话,有自带的简单内存泄漏提示。例如:Detected memory leaks!Dumping objects ->{1474} normal block at 0x0000000000335DF0, 16 bytes long. Data: < 4 > 10 80 34 00 00 00 00 00 00 00 00...原创 2020-01-22 18:00:58 · 7104 阅读 · 1 评论 -
你的应用进入了中断状态,但无任何代码显示,因为所有线程之前都在执行外部代码
VS调试运行的过程中代码报错,但是VS2017提示你的应用进入了中断状态,输出窗口只见报错信息,却不见错误的位置,很是烦人,怎样关闭这个“应用程序处于中断模式”的提示呢?VS主菜单 > Debug > Options > Debugging > General, 取消选中 Enable Just My Code。原创 2020-01-22 11:51:15 · 15310 阅读 · 9 评论 -
win7/10环境下VC++开发软件,怎么让exe有权限在c盘写文件
win7/10 如何让软件有权限在c盘写文件?如题,进程需要在exe文件夹下写文件,但是必须右键以管理员身份运行exe才能写文件,否则不能。那么如何双击exe运行就能写文件呢?解决办法:VC++工程属性->属性页->链接器->清单文件,把UAC执行级别设置为requireAdministrator即可。建议Debug不修改,只修改Release。...原创 2020-01-10 20:52:23 · 944 阅读 · 0 评论 -
MFC的宏_T()和_L()的区别,以及VS2017正则表达式批量替换_T()
1、Windows使用两种字符集ANSI和UNICODEWindows NT的所有与字符有关的函数都提供两种方式的版本,而Windows 9x只支持ANSI方式。_T一般同字常数相关,如_T("Hello")。如果你编译一个程序为ANSI方式,_T实际不起任何作用。而如果编译一个程序为UNICODE方式,则编译器会把"Hello"字符串以UNICODE方式保存。_T()和_L()的区别...原创 2019-11-20 09:44:13 · 1062 阅读 · 0 评论 -
MFC自定义环形进度条的实现
可以显示百分比,也可以显示秒数完整的源码下载:https://download.csdn.net/download/libaineu2004/11955177纠正源码一处错误:mfc获取控件在对话框上的位置,正确的源码应该这样写:CRectrect;m_stcProgress.GetWindowRect(&rect);//获取控件的屏幕坐标ScreenToC...原创 2019-11-03 20:21:20 · 988 阅读 · 0 评论 -
MFC用CFileDialog的派生类,打开文件时提示出错,ASSERT m_dwRef小于等于1
MFC用CFileDialog的派生类,打开文件时,提示ASSERT(m_dwRef <= 1)出错。使用VS2013,VS2015,VS2017都有这个问题:用CFileDialog的派生类CDlgCustom打开文件时,会触发异常。具体在C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MS...原创 2019-05-06 12:07:38 · 743 阅读 · 0 评论 -
VC++工具栏图标合并工具推荐:Axialis IconWorkshop
VC++开发会用到toolbar,在没有美工的时候,大部分时间我们只能自己上。传统的工具栏制作软件有:tbcreator和visual toolbar,但是都不好用。这里推荐Axialis IconWorkshop,软件官网:https://www.axialis.com/download/它是一款专业易用功能强大的图标全能软件。IconWorkshop 支持对Windows/Mac/...原创 2019-05-08 18:40:54 · 1168 阅读 · 0 评论 -
Visual Studio Image Library
Visual Studio Image Library是微软提供的一套不可多得的高质量图标库(Visual Studio中自己使用的)https://www.microsoft.com/en-us/download/details.aspx?id=35825原创 2019-05-08 18:25:03 · 764 阅读 · 0 评论 -
我个人中意的VS2017/VS2019插件,推荐给大家(#^.^#)
1、VS插件,微软官网https://marketplace.visualstudio.com/https://visualstudio.microsoft.com/zh-hans/vs/features/extend/--扩展 Visual Studio IDE,入门教程https://marketplace.visualstudio.com/publishers/Microso...原创 2019-12-10 11:43:30 · 102307 阅读 · 29 评论 -
使用Process Explorer工具分析Visual Studio 2013编译和调试产生的进程
1、Process Explorer和Process Monitor软件下载https://docs.microsoft.com/zh-cn/sysinternals/downloads/process-explorerhttps://docs.microsoft.com/zh-cn/sysinternals/downloads/procmon下载完,打开Process Explore...原创 2019-04-25 11:30:29 · 761 阅读 · 0 评论 -
为什么Visual Studio没有64位?
这个问题曾经在TechEd大会上被专门提到。微软说,的确有无数的开发者提议微软开发64bit的VisualStudio,但是微软没有这么做,是因为微软调查了绝大多数的深层需求,他们之所以期待64bit的VisualStudio,是因为他们认为64bit的程序可能拥有更高的性能。但是实际上不是这么回事,64bit程序在x86-64处理器上并不会带来明显的性能提高,它只是增加了处理器的寻址范围...原创 2019-05-05 15:22:10 · 8733 阅读 · 0 评论 -
Natvis文件实现VS2013调试可视化(Debugger Visualizers)
1、natvis文件是干什么的?微软提出使用一种.natvis的文件来定义一个类的对象在调试窗口时显示。natvis的定义方式举例如下:<Type Name="std::list<*>"> <DisplayString>{{ size={_Mysize} }}</DisplayString> <...原创 2019-04-24 21:17:00 · 3875 阅读 · 0 评论 -
DLL的灾难 --- DEBUG与RELEASE版本不能交叉调用
让我们先看一段引文,再来进行心灵的探索:If you have an EXE and a DLL.When your exe APP was built Debug Mode, your Dll must be Debug mode.When your exe APP was built Release Mode, your Dll must be Release mode.If ...转载 2019-05-04 23:17:46 · 4235 阅读 · 0 评论 -
VC++ PreTranslateMessage和WindowProc的使用总结
一、先看基础知识windows消息处理机制是这种: 首先系统(也就是windows)把来自硬件(鼠标,键盘等消息)和来自应用程序的消息 放到一个系统消息队列中去.而应用程序须要有自己的消息队列,也就是线程消息队列,每个线程有自己的消息队列,对于多线程的应用程序就有和线程数目相等的线程消息队列. windows消息队列把得到的消息发送到线程消息队列,线程消息队列每次取出一条消息发...原创 2019-05-27 11:33:14 · 1288 阅读 · 0 评论 -
Qt Creator IDE和MSVC 2015编译器组合使用(不想完整安装VS2015)
出发点是不想完整安装VS2015,只想安装C++编译器,然后提供给Qt Creator使用。也就是说Windows下开发应用或库时,如果不想安装完整的Visual Studio,可以选择只安装Visual C++ Build Tools即可。The Microsoft Visual C++ Build Tools installs only the command-line compil...原创 2019-04-20 10:49:27 · 8588 阅读 · 0 评论 -
CString的GetBuffer()主要作用是将字符串的缓冲区长度锁定,releaseBuffer则是解除锁定
CStringstr;CStringArrayarray;GetPrivateProfileString(_T("策略参数"),_T("ROI1"),_T(""),str.GetBuffer(MAX_PATH),MAX_PATH,m_strPathROI);//CString的GetBuffer()主要作用是将字符串的缓冲区长度锁定,releaseBuffer则是解除锁定,使...原创 2019-05-06 12:53:20 · 1914 阅读 · 0 评论 -
MFC双缓冲+提升绘图效率方法(号称三缓冲):自定义静态背景不频繁擦除(★firecat推荐★)
应用场景是:绘制一个运动小球,在大屏幕滚动,屏幕背景图也是一个自定义绘制的(填充色,线条和文字等组成)。如图所示。红色是小球,在大背景里动态移动,而背景是静态的,静止不动。1、MFC克服C++窗体重绘时的闪烁问题,用到的技巧是双缓冲。双缓冲原理网上的文章好多,这里不赘述。//---------------------------------MFC双缓冲//--------------...原创 2019-05-19 17:12:00 · 3436 阅读 · 1 评论 -
Windows GDI+
GDI:Graphics Device Interface,即图形设备接口,是Windows API的一个重要组成部分。它是Windows图形显示程序与实际物理设备之间的桥梁,GDI使得用户无需关心具体设备的细节,而只需在一个虚拟的环境(即逻辑设备)中进行操作。它的桥梁作用体现在:(1)用户通过调用GDI函数将逻辑空间的操作转化为具体针对设备驱动程序的调用。为实现图形设备无关性,Windo...原创 2019-05-11 22:07:44 · 893 阅读 · 0 评论 -
CAsyncSocket及CSocket的区别和用法
文章来源:http://blog.chinaunix.net/uid-20743151-id-326359.html转载 2014-10-23 14:06:34 · 14307 阅读 · 5 评论 -
VC++预编译头文件 – stdafx.h的作用是什么?
转载文章:http://www.zyh1690.org/c-the-precompiled-header-files-stdafx-h/预编译头文件的由来也许请教了别的高手之后,他们会告诉你,这是预编译头,必须包含。可是,这到底是为什么呢?预编译头有什么用呢?咱们从头文件的编译原理讲起。其实头文件并不神秘,其在编译时的作用,就是把自己的所有内容直接“粘贴”到相应的 #include 语...转载 2019-06-11 13:27:37 · 1752 阅读 · 0 评论 -
成功实现C++调用C#写的库(CLR),我的个人心得与总结
一、先说说我的个人心得我新建了C++ win32动态库工程,准备调用C#类库。//使用CLR的方式,成功实现C++调用C#类库,注意事项://1.//不要尝试在DllMain或映像初始化函数内运行托管代码,这样做会导致应用程序挂起。//解决办法://注释掉dllmain.cpp文件里的主函数BOOLAPIENTRYDllMain//2.//本人在实践工程中遇到两个难点:/......原创 2019-06-19 21:01:38 · 15310 阅读 · 0 评论 -
写了个VC++ MFC小工具,一键整理Resource.h文件,重新排序并去重复ID(★firecat推荐★)
一般MFC开发的时候,如果有些资源是从其他工程中移植到本工程的,而在资源移植的时候都要将对应的资源ID复制到本工程的resource.h文件中。此时不管你在不在本工程中添加资源ID,resource.h文件中的ID可能都有重复的,一般再添加资源ID后,肯定有重复的。此外,随着界面越来越多,各种控件对话框的ID都堆积在一起,令人看得闹心。今天我自己整理了一个小工具,可以打开Resource.h文...原创 2019-05-29 20:54:05 · 2926 阅读 · 0 评论 -
MFCButton Memory leak(内存泄露和多字节内存溢出导致不能用的问题)
文章来自:https://blog.csdn.net/haoekin/article/details/88512191.无法显示右边箭头的问题无论怎么折腾都没显示不出来,微软给的示例又能显示,度娘和谷歌也都不知道,经过不断地探索总算找到解决办法了:在rc2文件中加上下面的内容即可#ifndef _AFXDLL#include "afxribbon.rc" // Ribbon...转载 2019-06-07 00:09:41 · 528 阅读 · 0 评论 -
MFC自定义消息发送机制及CString对象作为消息发送(我误认为PostMessage发了多次,其实没有)
https://bitwjg.wordpress.com/2011/07/17/mfc%E8%87%AA%E5%AE%9A%E4%B9%89%E6%B6%88%E6%81%AF%E5%8F%91%E9%80%81%E6%9C%BA%E5%88%B6%E5%8F%8Acstring%E5%AF%B9%E8%B1%A1%E4%BD%9C%E4%B8%BA%E6%B6%88%E6%81%AF%E5%8F...转载 2019-05-27 17:42:32 · 1808 阅读 · 0 评论 -
VC++ SendMessage和PostMessage使用总结
结论:1、PostMessage不能频繁的发送同一个消息,除非保证上次Post过的消息处理完成。2、如果用SendMessage导致应用程序用户体验下降,应该检查消息处理函数,而不仅仅简单改为PostMessage。3、如果消息是程序必须处理的,则不能使用PostMessage。消息队列满时,后面来的PostMessage的消息将被丢弃。4、如果消息是程序必须处理,...原创 2019-05-27 10:17:54 · 4521 阅读 · 0 评论 -
VC++关于使用WaitForSingleObject等待线程安全退出,出现死机问题的解决
1、MFC项目场景如下:主线程新建了子线程:CWinThread *m_pThread_SysReset;m_pThread_SysReset=AfxBeginThread(ThreadSysResetthis);主界面等待子线程退出时,主线程主动调用了函数:WaitForSingleObject(m_pThread_SysReset->m_hThread, INFIN...原创 2019-05-26 12:07:47 · 5491 阅读 · 0 评论 -
\mfc\dumpcont.cpp(23) : atlTraceGeneral 内存泄漏
Detected memory leaks!Dumping objects ->f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(156) : {4873} normal block at 0x069959A0, 26 bytes long.Data: <x > 78 C5 9C 0F ...原创 2019-05-12 14:40:13 · 3557 阅读 · 0 评论 -
好工具推荐系列:VC++开发必备神器 -- Dependencies,查看依赖库DLL,支持win10,比depends更好用
1、微软官方有提供depends,可以查看exe文件的依赖库,仅适用于winxp/win7/win8,但是不能用于win10,会卡死报错.官网下载:http://www.dependencywalker.com/2、隆重推荐Dependencies,可以应用在win7/win8/win10,不支持winxp,但还是推荐使用!软件下载:https://github.com/luca......原创 2019-04-29 11:13:23 · 37726 阅读 · 15 评论 -
Qt Creator编译项目,报错,error: LNK1158: 无法运行“rc.exe”
Qt在debug模式下编译程序时报错:error: LNK1158: 无法运行“rc.exe”系统环境:Win7 64位,Qt_5_9_8_MSVC2015_32bit解决方法:找到rc.exe的放置路径,比如C:\Program Files (x86)\Windows Kits\8.1\bin\x86然后添加到环境变量PATH中,重启Qt即可!...原创 2019-04-26 23:59:25 · 6849 阅读 · 3 评论 -
成功实现在Visual Studio 2013中使用MSVC 2015编译器,平台工具集可见(★firecat推荐★)
网上大量的博客都是讲述如何在高版本的VS使用低版本的编译器,例如电脑已经安装了VS2017,但是不想安装低版本的VS2015/VS2013/VS2010等,同时又想用低版本的编译器。这类的博客实在太多,方法我就不赘述了。然而我的这篇博客......是的,你没有看错标题,就是实现在Visual Studio 2013中使用MSVC 2015编译器!即VS低版本使用高版本编译器!本人的电脑安装...原创 2019-04-23 21:34:00 · 5869 阅读 · 1 评论 -
MFC小技巧,大杂烩(★firecat推荐★)
0. Alt+F8 自动对齐格式1.CString str;str.Format("%d",m_width);SetDlgItemText(IDC_XXX,str);或 SetDlgItemText(AfxGetMainWnd()->m_hWnd,IDC_XXX,str);2.GetDlgItem(IDC_XXX)->EnableWindow(TRUE);////...原创 2015-09-28 17:04:32 · 801 阅读 · 0 评论 -
CWnd,HWND; CDC,HDC
一:CWnd、HWND、HANDLECWnd: Window Class 窗口基类HWND: Window Handle 窗口句柄HANDLE: handle 句柄(1)HWND hWnd; CWnd *pWnd = CWnd::FromHandle(hWnd);(2)CWnd *pWnd = GetDlgItem(IDC_STATIC_SHOW); HWND原创 2015-09-28 17:03:17 · 2390 阅读 · 0 评论