
C++ MFC
文章平均质量分 93
逆枫゛
武汉科技大学计算机系毕业,曾就职于国内一线的虚拟现实和信息安全公司,10余年C++/Qt开发经验。2017年辞职,与朋友合伙创办了一家新能源公司,一年后获得行业龙头投资,目前快速发展中。
展开
-
VS设置增量编译
如何设定VS增量编译:请按照如下步骤操作1、项目-属性-配置属性-C/C++-代码生成-启用最小重新生成:Yes(/Gm)2、项目-属性-配置属性-C/C++-常规-调试信息格式:程序数据库(/Zi)3、项目-属性-配置属性-链接器-常规-“启用增量链接”选择“是”4、工具-选项-项目和解决方案-生成并运行 -当项目过期时,选择“提示生成”5、工具-选项-项目和解决方案-生转载 2018-04-19 14:51:50 · 3483 阅读 · 0 评论 -
在VC和VS中使用条件断点
1,目的有时候我们打了一个断点,但是希望当同时满足其他某些条件时才让这个断点触发,我们可以选择手动更改代码加上判断条件,但这样比较麻烦而且多余,使用条件断点就比较容易地处理这个情况。最常见的情景是想断在循环中的某一次。VC和 VS都带有这个功能。2,VC中使用条件断点①使用方法。如图:打开菜单Edit->Breakpoints或按原创 2014-03-17 19:12:42 · 1596 阅读 · 0 评论 -
生成全球唯一名称字符串,GUID的使用
1,涉及API及结构使用CoCreateGuid 函数即可。需要 objbase.h 头文件。原型:HRESULT CoCreateGuid( GUID * pguid);其中GUID结构:typedef struct _GUID { unsigned long Data1; unsigned short Data2; unsi原创 2014-03-17 23:21:44 · 14541 阅读 · 1 评论 -
生成程序崩溃的dump文件,使用windbg调试
1,目的有时候程序在客户那里崩溃了,你程序也没有什么有效的log日志能记录到崩溃的细节,那这实在是一件很麻烦的事情。你得向客户反复了解操作内容并希望能在自己这里重现,这个过程想想都很痛苦吧。。使用下面的方法,能在程序崩溃时生成一个自己的dump文件,记录了崩溃时的一些有用的信息,一般能帮你容易地找到出错的地方。2,原理简单地说,就是windows程序崩溃原创 2014-03-18 14:21:21 · 13706 阅读 · 1 评论 -
WinDbg分析蓝屏dump教程
一、WinDbg是什么?它能做什么? WinDbg是在windows平台下,强大的用户态和内核态调试工具。它能够通过dmp文件轻松的定位到问题根源,可用于分析蓝屏、程序崩溃(IE崩溃)原因,是我们日常工作中必不可少的一个有力工具,学会使用它,将有效提升我们的问题解决效率和准确率。二、WinDbg6.12.0002.633下载:x86位版本下载:【微软官方安装版】转载 2014-07-15 09:08:44 · 4247 阅读 · 1 评论 -
值得推荐的C/C++框架和库 (真的很强大)
值得学习的C语言开源项目- 1. WebbenchWebbench是一个在linux下使用的非常简单的网站压测工具。它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力。Webbench使用C语言编写, 代码实在太简洁,源码加起来不到600行。下载链接:http://home.tiscali.cz/转载 2016-06-30 21:51:07 · 4557 阅读 · 0 评论 -
开源网络库比较 ACE、ASIO、libevent
开源C/C++网络库:ACE C++语言 跨平台Boost的ASIO C++语言 跨平台libevent C语言 主要支持linux,新版增加了对windows的IOCP的支持libev C语言 只支持linux,只封装了EPOLL模型层次架构:ACE:底层是OS适配层,上一层C++的wrap类,再上一转载 2017-08-10 14:12:32 · 3505 阅读 · 0 评论 -
【磁盘处理相关方法】2,得到磁盘总空间、可用剩余空间
1,涉及的APIGetDiskFreeSpaceEx,声明如下:WINBASEAPIBOOLWINAPIGetDiskFreeSpaceExA( __in_opt LPCSTR lpDirectoryName, __out_opt PULARGE_INTEGER lpFreeBytesAvailableToCaller, __out_opt PU原创 2014-01-12 20:06:36 · 2100 阅读 · 0 评论 -
【进程处理】3,MFC枚举当前进程所有模块
1,代码 PBYTE pb = NULL; MEMORY_BASIC_INFORMATION mbi; while (VirtualQuery(pb,&mbi,sizeof(mbi)) == sizeof(mbi)) { TCHAR szModeName[MAX_PATH] = {0}; if (mbi.State == MEM_FREE) { mbi.Allo原创 2014-11-10 16:08:10 · 1600 阅读 · 0 评论 -
使用VS2008进行双机远程调试
1,目的有时候,程序由于某些原因并不能在开发机上运行(如可能加载有问题的驱动,运行环境在远处的客户那等),这就需要用到远程调试的技术。2,步骤我这里就演示在虚拟机里运行该程序,然后在本机物理机的vs2008下断点调试。在远程机器上只要网络能连接,是一样的效果。一:远程机器的环境设置①把开发机上vs2008安装目录中的Remote De原创 2014-03-16 16:15:10 · 4114 阅读 · 0 评论 -
MFC几种给对话框添加背景图的方法
1,目标总结几种给MFC对话框添加背景图片的方法。2,实现方式一:(适用与多种格式)用CImage类可以加载多种格式的图片,在OnPaint中Draw即可。void CBackgroundDlg::OnPaint(){ if (IsIconic()) { CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICON原创 2013-12-12 21:18:43 · 29456 阅读 · 6 评论 -
MFC 设置窗口透明度
1,目的使窗口具有半透明的效果。2,原理&实现在OnInitDialog()中直接修改窗口风格://设置窗口透明度 ModifyStyleEx(0, WS_EX_LAYERED); SetLayeredWindowAttributes(RGB(0,0,0),150,LWA_ALPHA);其中,150代表以0为完全透明,255为完全不透明的 不透明度值原创 2013-12-21 21:17:18 · 3026 阅读 · 0 评论 -
MFC模拟360悬浮窗加速球窗口
1,目标实现类似360悬浮窗口这样的效果,当窗口在屏幕边缘时,鼠标移开,就自动向边缘隐藏,鼠标移动上去,就又显示出来。2,原理首先是实现圆角或椭圆这种不规则形状的窗口,可以参考另一篇文章:MFC实现不规则窗口 然后需要给没有标题栏的窗口增加拖拽移动的功能,这个就是自己手动发送一个消息,使windows认为鼠标在标题条上对于原创 2013-12-11 17:32:36 · 11973 阅读 · 9 评论 -
MFC消息机制逆向追踪
MFC消息机制逆向追踪(上) 本文目的就是以一个MFC的标准对话框程序为例,同时从源码和反汇编代码两方面来研究MFC消息的流程走向,弄清MFC消息路径的所有站点,这样就可以任意定位MFC的所有消息事件,可以从任一站点切入,进行跟踪分析MFC的处理过程。甚至可以从PumpMessage大本营出发,一直全程跟踪,做到心中有数,不慌不乱。关于对话框的启动过程,其过程很简单,程序进入转载 2012-09-29 11:17:47 · 2344 阅读 · 0 评论 -
MFC实现不规则形状窗口(CF登陆窗口)
1,目标实现形状不规则的窗口,例如CF登陆窗口。可以看到,窗口不是死板的矩形,而是带突出带凹陷的不规则形状。2,原理查询CWnd接口,有一个叫SetWindowRgn的方法,可以设置窗口显示的区域。函数原型 int SetWindowRgn(HRGN hRgn,BOOL bRedraw);hRgn代表一个区域,这个HRGN结构有一些生成的方法,其中有通过矩形、多原创 2013-12-04 23:22:06 · 12275 阅读 · 10 评论 -
使程序只能运行一个实例
1,目标使我们的程序只能有一个正在运行的实例。并且在第二次运行时,若前一个实例主窗口处于最小化状态,就让前一个实例恢复原大小显示出来。2,原理前一实例进程运行期间得留下一个可供后一实例进程判断的标志,算一种进程间通信。不过不需要传递多少数据,仅仅有个标志就OK。一个简单思路:程序开始时创建一个可命名的内核对象,退出时关闭。如果已存在则说明存在实例在使用这个内核对原创 2013-12-10 16:03:52 · 1287 阅读 · 0 评论 -
MFC 使程序不在任务栏显示
1,目标使程序隐藏在任务栏的简单方法。适用与一些特殊窗口情况,比如悬浮窗、弹窗等,不需要在任务栏显示。2,原理&实现在OnInitDialog()中直接修改窗口风格:// 让本程序不在任务栏显示(创建一个工具条窗口) ModifyStyleEx(WS_EX_APPWINDOW,WS_EX_TOOLWINDOW);3,效果原创 2013-12-13 20:35:19 · 5973 阅读 · 0 评论 -
MFC选择文件夹的对话框
1,目的提供一个对话框供用户选择一个文件夹路径。2,原理&实现先贴上这个工具类的源码:在你的程序中使用静态方法 CSelectFolderDlg::Show() 就能显示一个选择文件夹的对话框拉,返回的CString就是所选文件夹路径。/*文件:SelectFolderDlg.h说明:提供一个选择文件夹的对话框*/#ifndef SELECT_FOLD原创 2013-12-21 01:21:51 · 36345 阅读 · 12 评论 -
使用Detours库截获windows api
1,目的介绍微软的一个用来截获系统API的库detours的简单用法,示例截获MessageBox的方法。2,实现win32控制台程序:#include "stdafx.h"#include #include "detours.h"#include #include #pragma comment(lib, "detours.lib")#pr原创 2014-03-16 21:07:10 · 1616 阅读 · 0 评论 -
MFC一个简单的计算器程序
1,简介某个晚上帮人做的一个MFC课程设计的作业。大概花了两三个小时。效果:就和平常使用的计算器用法差不多。2,源码下载MFC一个简单的计算器程序源码3,部分主要代码原创 2014-02-10 20:54:53 · 78692 阅读 · 23 评论 -
【路径相关方法】1,获取各种系统路径
1,目的介绍获取Windows常用的一些系统路径的方法(当前用户),如:桌面、我的文档等。并提供简单封装为类PathHelper,供以后工程快捷调用。2,原理&实现第一部分 常用系统及进程目录①获取系统system32路径:(c:\windows\system32) 使用函数GetSystemDirectory. CString版封装:static C原创 2013-12-24 20:57:46 · 11328 阅读 · 0 评论 -
【系统信息获取】10,获取本机IP地址
1,原理使用上文所说的 方法得到主机名,再使用函数 gethostbyname 可以得到 hostent结构的主机实体。当中存储了主机的一些信息,包括IP。gethostbyname 原型:struct hostent FAR *WSAAPIgethostbyname( __in const char FAR * name );返回的 h原创 2014-02-10 17:57:35 · 1466 阅读 · 0 评论 -
【进程处理】2,枚举进程方法二,可获取进程用户名等
1,目的在第一篇介绍了枚举当前进程及关闭进程的方法。这里介绍另一种方法,枚举的同时我们能获取到更多信息。比如是用户名(System或Administrator等)2,代码#include "stdafx.h"#include #include #pragma comment( lib, "Wtsapi32.lib" )int main(int argc,原创 2014-02-28 14:19:18 · 1941 阅读 · 0 评论 -
【系统信息获取】2,获取操作系统位数
1,涉及APIGetNativeSystemInfo 原型:void WINAPI GetNativeSystemInfo( _Out_ LPSYSTEM_INFO lpSystemInfo);这个函数在kernel32.dll中。SYSTEM_INFO 结构:typedef struct _SYSTEM_INFO { union {原创 2014-02-07 15:05:12 · 4466 阅读 · 2 评论 -
【系统信息获取】7,获取CPU型号
1,涉及API同上一篇,也是使用 GetSystemInfo 函数。2,使用//获取CPU型号 SYSTEM_INFO si; memset(&si,0,sizeof(SYSTEM_INFO)); GetSystemInfo(&si); switch (si.dwProcessorType) { case PROCESSOR_原创 2014-02-10 16:37:31 · 1677 阅读 · 0 评论 -
【路径相关方法】6,判断一个字符串是否为一个文件夹路径形式(无论存在与否)
1,目的用户输入了一个字符串,我只想知道输入的字符串的形式是否是一个有效的文件夹路径。不管这个文件夹存在与否。2,原理两种思路:一,自己审查字符串各个字符的组合形式。(算法较繁琐,需要考虑情况很多)二,使用创建路径的API。用该字符串创建路径,成功了不用说,当然是符合条件的。失败了,看具体原因,如果因为已存在,那么当然也说明这个字符串是对的。排除其他原创 2014-01-28 18:01:47 · 6253 阅读 · 0 评论 -
【进程处理】4,刷新任务栏托盘区,清除异常关闭进程的残留图标
1,目的之前介绍了枚举进程并关闭进程的方法,可是有一个问题,使用TerminateProcess关闭的进程如果生成过托盘图标,这个图标就会停留在右下角的托盘区(因为该进程来不及执行自己的图标清理代码),直到鼠标移上去时才消失。显然这个效果并不理想。2,思路这里我们可以自己给这个托盘区窗口发送鼠标经过消息,使其更新。用vs附带的spy++工原创 2014-02-28 15:49:41 · 14321 阅读 · 4 评论 -
【系统信息获取】9,获取主机名
1,涉及API方法一、使用GetComputerName。原型:BOOL WINAPI GetComputerName(__out LPTSTR lpBuffer,__inout LPDWORD lpnSize);lpBuffer : 用来接收主机名的字符串。lpnSize : 返回字符串长度。方法二、使用 WinSock2.h 中的 gethos原创 2014-02-10 17:32:00 · 1174 阅读 · 0 评论 -
【路径相关方法】3,判断某路径的文件和文件夹是否存在
文件是否存在API:BOOL PathFileExists(LPCTSTR lpszPath);文件夹是否存在API:BOOL PathIsDirectory(LPCTSTR pszPath);包含头文件和库:#include #pragma comment(lib, "shlwapi.lib")原创 2014-01-28 11:45:06 · 854 阅读 · 0 评论 -
【磁盘处理相关方法】1,判断磁盘是否存在
1,涉及的API原型:DWORD GetLogicalDrives(void);说明:返回值是一个32位的DWORD值,每一位分别代表盘符为某个字母的磁盘是否存在,为1则存在。这样其实只有低26位是我们关心的,因为a~z只有26个嘛。判断A盘是否存在,就用000......00000001跟这个返回值&,为真就存在,否则就不存在。同理,B盘就用000原创 2014-01-12 18:57:53 · 3597 阅读 · 0 评论 -
【磁盘处理相关方法】3,得到最空闲的磁盘
1,目的有时候我们需要让用户设置我们软件的安装目录或其他路径等,以前windows的软件经常提供的默认安装路径在 C:\Programs中,可其实为节约系统盘,很多人是选择其他盘符作为安装目录的。我们这里可以自动找到最为空闲的磁盘,提示给用户,或直接把默认路径设在该盘。2,原理根据【磁盘处理相关方法】1、2,介绍的枚举磁盘、求磁盘大小等方法,这里就很原创 2014-01-12 20:31:39 · 1305 阅读 · 0 评论 -
【系统信息获取】3,注册表中的当前系统各种信息
1,简介注册表是Microsoft Windows中的一个重要的数据库,用于存储系统和应用程序的设置信息。在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion 中,保存了多条当前操作系统的属性。直接用注册表的API获取就可以了。2,使用这里获取了注册表原创 2014-02-10 14:16:37 · 2685 阅读 · 0 评论 -
【路径相关方法】5,清空删除文件夹
1,原理遍历文件夹,当是文件,就删除,是文件夹就递归。最后移除文件夹。2,实现MFC版本:使用CFileFind类遍历。BOOL DeleteFolder(CString strPath){ CFileFind ff; BOOL bFound; bFound = ff.FindFile(strPath + "\\*.*"); whi原创 2014-01-28 13:16:36 · 1184 阅读 · 0 评论 -
【获取系统信息】4,获取CPU名称、主频
1,简介同上一篇一样,这里在注册表中能获取到硬件的一部分信息,如CPU的名称、主频等。2,使用HKEY hKey; LONG lReturn; DWORD type; DWORD dwSize = 100; DWORD dwMHz; WCHAR szCPUName[100] = {0}; //打开注册表 lReturn = Re原创 2014-02-10 15:09:34 · 1933 阅读 · 0 评论 -
【系统信息获取】5,获取CPU当前使用率
1,原理CPU资源看做是一个个的时间片,统计CPU使用率也是计算在一段时间内忙碌的时间占比。我们知道GetSystemTime可以得到当前系统时间,另外一个名字类似的函数,GetSystemTimes可以得到三种不同的时间(自开机以来):空闲时间,内核时间和用户时间。CPU要么是在内核态,要么是在用户态。相加就是CPU总时间。所以有以下公式:CPU使原创 2014-02-10 15:46:25 · 7700 阅读 · 2 评论 -
【系统信息获取】6,获取CPU核心数目
1,涉及APIGetSystemInfo 原型:void WINAPI GetSystemInfo(_Out_ LPSYSTEM_INFO lpSystemInfo);SYSTEM_INFO 结构在前文介绍过:其中包含了处理器的核心数目。typedef struct _SYSTEM_INFO { union { DWO原创 2014-02-10 16:29:15 · 2438 阅读 · 0 评论 -
【路径相关方法】2,判断文件夹是否为空
1,目的判断一个文件夹是否为空。2,原理及实现遍历文件夹找到除"."和".."以外的目录,就说明不为空。一,使用Platform SDK的两个函数 FindFirstFile 和 FindNextFile.形式:HANDLEFindFirstFile(LPCTSTRlpFileName,LPWIN32_FIND_DATA原创 2014-01-28 11:24:07 · 5513 阅读 · 0 评论 -
【系统信息获取】1,获取系统版本
1,涉及APIGetVersionEx函数原型:[cpp] view plaincopyBOOL GetVersionEx(POSVERSIONINFO pVersionInformation); 结构OSVERSIONINFOEX定义如下:[cpp] view plaincopy原创 2014-02-07 14:29:50 · 1257 阅读 · 0 评论 -
【进程处理】1,枚举进程,关闭进程
1,代码如下#include "stdafx.h"#include #include "tlhelp32.h"int main(int argc, char* argv[]){ PROCESSENTRY32 pe; DWORD id=0; HANDLE hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);原创 2014-02-28 13:17:12 · 1629 阅读 · 0 评论 -
【系统信息获取】8,获取内存大小,可用内存大小
1,涉及APIGlobalMemoryStatusEx 原型:BOOL WINAPI GlobalMemoryStatusEx( _Inout_ LPMEMORYSTATUSEX lpBuffer);获取到的MEMORYSTATUSEX结构内容为:typedef struct _MEMORYSTATUSEX { DWORD dwLength; D原创 2014-02-10 16:49:09 · 3068 阅读 · 0 评论