MFC/VC
龙舞天涯
这个作者很懒,什么都没留下…
展开
-
一些常用到的文件路径相关的API
Path API需要头文件:shlwapi.h其中有一些函数功能存在重复,我在认为比较常用的的函数上加红。BOOL PathFileExists(LPCTSTR lpszPath)功能:检查文件/路径是否存在LPTSTR PathFindFileName(LPCTSTR pPath)功能:获得路径中的文件名例如:PathFileFileName( “c://Prog转载 2017-11-30 09:59:17 · 1683 阅读 · 0 评论 -
套接字函数及其理解
转载 2016-03-15 17:29:07 · 461 阅读 · 0 评论 -
UML类图关系大全【转】
1、关联双向关联:C1-C2:指双方都知道对方的存在,都可以调用对方的公共属性和方法。在GOF的设计模式书上是这样描述的:虽然在分析阶段这种关系是适用的,但我们觉得它对于描述设计模式内的类关系来说显得太抽象了,因为在设计阶段关联关系必须被映射为对象引用或指针。对象引用本身就是有向的,更适合表达我们所讨论的那种关系。所以这种关系在设计的时候比较少用到,关联一般都是有向的。转载 2016-03-22 16:55:42 · 333 阅读 · 0 评论 -
dll 导出函数名的那些事
经常使用VC6的Dependency查看DLL导出函数的名字,会发现有DLL导出函数的名字有时大不相同,导致不同的原因大多是和编译DLL时候指定DLL导出函数的界定符有关系。VC++支持两种语言:即C/C++,这也是造成DLL导出函数差异的根源我们用VS2008新建个DLL工程,工程名为"TestDLL"把默认的源文件后缀 .CPP改为.C(C文件)输入测试代码如下:01 in转载 2016-03-10 11:43:37 · 548 阅读 · 0 评论 -
VS2010中如何查看DLL的导出接口
看《VC++动态链接库(DLL)编程深入浅出》时,里面提到使用Visual C++的Depends工具可以查看动态链接库中的导出接口。对于VC6.0,VC所带的Depends软件,在VC6安装目录下的tools文件夹里面,可以直接运行。但是VS2010中没有了Depends工具,如何查看DLL文件的导出接口呢? 解决方法:(方法来源)1. 打开命令行窗口2. 运行vcvar转载 2016-02-18 18:03:56 · 714 阅读 · 0 评论 -
VC6.0中如何修改工程的名字
其实有一个比较简单的方法,不过需要的是仔细,我已经试过了是可行的,假如你的工程是AAA,想改为BBB,请按照一下步骤操作:1 备份源工程,这样即便是失败也没关系.2 删除工程对应的临时文件,AAA.ncb,AAA.opt,AAA.APS3 用文本编辑工具,不如UltraEdit,打开AAA.dsp,搜索字符串AAA,确认该字符串是工程名相关,并替换为BBB,替换完后,保存退出,修改转载 2016-01-28 21:12:54 · 616 阅读 · 0 评论 -
在主线程中慎用WaitForSingleObject (WaitForMultipleObjects)
下面的代码我调试了将近一个星期,你能够看出什么地方出了问题吗?线程函数:DWORD WINAPI ThreadProc( while(!bTerminate) { // 从一个链表中读取信息并且插入到CListCtrl中 // CListCtrl的句柄是通过线程参数传递进来的 for(;;)转载 2016-01-28 21:03:37 · 982 阅读 · 0 评论 -
在MFC窗口嵌入网页浏览器(web browser、html)
其实是用方式很简单,就是把ActiveX Control整合到自己的窗口类中MSDN目录:Web开发>Internet Explorer Development>Hosting and Reuse>WebBrowser Control>Overviews/Tutories>Reusing the WebBrowser ControlMSDN网址:http://msdn.micros转载 2016-01-28 20:56:04 · 3607 阅读 · 0 评论 -
串口通信工程笔记
一、串口API1. 打开串口 使用CreateFile函数可以打开串口。通常有两种方式可以打开,一种是同步方式(NonOverlapped),另外一种异步方式(Overlapped)。 HANDLE hComm; hComm = CreateFile( gszPort,转载 2016-01-28 20:49:03 · 453 阅读 · 0 评论 -
C++反射机制的实现
前几天用C++为《捕鱼达人》移植UI编辑器的时候,遇到了几个难点。一个是通过类名的字符串创建相应的类的实例化。还有一个是通过属性的名字字符串来操作相应的类的属性。用支持反射的Objective-C或者Java语言来实现类似功能是非常简单的。但是C++不支持,纠结了几天,终于实现了类似于反射的功能。思路分为以下几步:1、在要反射的类中定义一个回调函数,用来创建这个类的实例;2转载 2016-01-28 20:46:22 · 298 阅读 · 0 评论 -
VS2010 C++ 操作Excel表格的编程实现
通过VC实现对Excel表格的操作的方法有多种,如:通过ODBC数据库实现,通过解析Excel表格文件,通过OLE/COM的实现。本文主要研究通过OLE/COM实现对Excel表格的操作。 本文源码的应用环境说明:Windows XP SP3Microsoft Visual Studio 2010Microsoft Office Excel 2转载 2016-01-28 20:43:27 · 2492 阅读 · 0 评论 -
介绍几个程序中关于"路径字符串"的函数
程序中经常用到获取路径。之前的博客也讲到过关于获取路径的一些操作。获取系统特殊目录 比如使用SHGetFolderPath函数获取windows系统的一些目录:HRESULT SHGetFolderPath( HWND hwndOwner, int nFolder, HANDLE hToken, DWORD dwFlags, LPTSTR pszPath );转载 2016-01-28 20:16:35 · 278 阅读 · 0 评论 -
windows客户端开发--让你的客户端崩溃之前生成dump文件
debug时候我们可以很快速、精确的定位问题所在。但是对于release版本,我们往往无能为力。尤其面对一群难缠的客户,情况就会更加糟糕。而且对于release版本来说,crash的时候日志系统往往起不到任何作用。而且,我们也不可能捕获所有的异常,更何况,客户端崩溃的原因都是我们捕获不了的异常。这就需要dump文件了。dump文件是C++程序发生异常时,保存转载 2016-04-20 09:59:51 · 901 阅读 · 0 评论 -
ATL字符串转换宏
有比MultiByteToWideChar和WideCharToMultiByte更简单的字符串转换宏,你相信吗?头文件d:/program files/microsoft visual studio 8/vc/atlmfc/include/atlconv.h如果要使用ATL字符串转换宏,请先定义USES_CONVERSION; // 只需要调用一次,就可以在函数中进行多转载 2016-07-20 14:21:49 · 1463 阅读 · 0 评论 -
服务器中判断客户端socket断开连接的方法
下面来罗列一下判断远端已经断开的方法:法一:当recv()返回值小于等于0时,socket连接断开。但是还需要判断 errno是否等于 EINTR,如果errno == EINTR 则说明recv函数是由于程序接收到信号后返回的,socket连接还是正常的,不应close掉socket连接。 法二: struct tcp_info info; in转载 2017-09-08 16:44:57 · 3892 阅读 · 0 评论 -
vc中对话框使用技巧集合
注:以下代码以一个名为CTest6Dlg的对话框类为例--------------------------------------------------------------------------------1. 在任务栏隐藏对话框 ModifyStyleEx(WS_EX_APPWINDOW, WS_EX_TOOLWINDOW);---------转载 2017-09-08 16:26:47 · 726 阅读 · 0 评论 -
用代码操纵剪切板
拷贝与粘贴文本 下边的源代码演示了如何将文本(包含在CString对象“source”中)拷贝到剪贴板上。 CString source; //put your text in source if(OpenClipboard()) { HG转载 2017-06-16 08:58:01 · 1056 阅读 · 0 评论 -
vc中删除文件夹以及文件夹中的内容的三种方法
BOOL CDeleteFolderDlg::DeleteFolder(CString lpszPath)//删除文件夹以及文件夹内的文件{ CHAR szFromPath[_MAX_PATH];//源文件路径memcpy(szFromPath, lpszPath, lpszPath.GetLength());szFromPath[lpszPath.GetLength() +转载 2017-03-11 14:03:08 · 7926 阅读 · 0 评论 -
MFC操作注册表
打开注册表键 1 LONG RegOpenKeyEx(2 HKEY hKey, // handle to open key主键3 LPCTSTR lpSubKey, // subkey name子键4 DWORD ulOptions, // reserved。必须是05 REGSAM samDesired, // security转载 2017-02-22 14:49:22 · 507 阅读 · 0 评论 -
VC实现程序重启的做法
很多时候系统有很多配置项,修改了配置项之后能有一个按钮实现系统重启。所谓重启就是杀死系统的当前进程,然后重新开一个新进程。同事探索了一下,实现了这个功能。我总结了一下他的经验。下面一个MFC的对话框程序的按钮响应函数说明如何实现。 [cpp] view plain copy// 重启按钮响应函数 void CTestRebootDl转载 2016-10-07 15:27:05 · 969 阅读 · 0 评论 -
pugixml库
来源:http://blog.csdn.net/clever101以前觉得tinyxml也是一个挺好的操作xml文件的库。最近找到了pugixml库,发现pugixml库对tinyxml可谓是全面胜出。 一.支持字符集:tinyxml不支持unicode(这个可谓是很多人不愿意用tinyxml的原因之一),pugixml支持UTF8 encoding、Little-转载 2016-10-07 14:45:34 · 1425 阅读 · 0 评论 -
VC通用对话框
1.选择文件对话框 CFileDialog FileDialog(TRUE,NULL, NULL, OFN_READONLY|OFN_CREATEPROMPT,_T("Region File(*.reg)|*.reg||"),this);CString strPath = m_pObj->GetProjectDir()+_T("Region");FileDialog.m_ofn.l原创 2016-11-03 14:42:46 · 918 阅读 · 0 评论 -
C++ 中的位操作
定义二进制变量:一般是以八进制或者十六进制来定义,八进制数以0开头,十六进制数以0x开头例如int a = 0x80, 这里的80只能表示8个二进制位,它表示的是int的低8位,前面的24个二进制位补0,所以a = 128;也可以 a = –0x80, 此时a = -128;8进制同理需要注意的是:如果0x…能够在整形内表示,则其默认是int,否则再看unsigned i转载 2016-10-13 19:11:17 · 5337 阅读 · 0 评论 -
打造圆润的mfc
添加如下文件:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'最后 效果就是:转载 2016-08-28 15:11:51 · 433 阅读 · 0 评论 -
如何给自己的程序添加BugReport
借助MiniDumpWriteDump函数把崩溃进程的调用堆栈、CPU寄存器等信息写入本地文件。然后我们可以调用我们的BugReport.exe程序,让他发送Dump文件给服务器,然后重启客户端程序。LONG __stdcall MyExceptionFun( LPEXCEPTION_POINTERS lpExcept){wchar_t szMsg[1024]={0};wspr转载 2016-01-09 16:39:53 · 629 阅读 · 0 评论 -
设计模式之观察者模式的C++实现
当一个对象改变时需要同时通知其他多个对象,或者说一个对象依赖另一个对象的时候,使用观察者模式可以将这两者封装在独立的对象中使他们各自独立地改变和复用。观察者模式所做的工作就是在接触耦合,让相互耦合的双方都依赖于抽象而不是具体类,从而使得各自的改变都不会影响到对方。(引用自 《大话设计模式》)下面提供一个观察者模式的C++实现版本:[cpp] view p转载 2016-01-09 16:24:16 · 246 阅读 · 0 评论 -
Visual C++ 64 位迁移的常见问题
64位的win7已经广泛、深入应用了,赶快看看我的32位程序该怎么办吧?1、用 Visual C++ 创建在 64 位 Windows 操作系统中运行的应用程序时,应注意以下问题:在 64 位 Windows 操作系统中,int 和 long 是 32 位值。对于计划为 64 位平台编译的程序,应注意不要将指针赋给 32 位变量。在 64 位平台上,指针为 64 位,如果将该指转载 2016-01-23 23:34:41 · 1096 阅读 · 0 评论 -
Unicode下CString与char *转换
Unicode下CString与char *转换在Visual C++.NET2005中,默认的字符集形式是Unicode,但在VC6.0等工程中,默认的字符集形式是多字节字符集(MBCS:Multi-Byte Character Set),这样导致在VC6.0中非常简单实用的各类字符操作和函数在VS2005环境下运行时会报各种各样的错误,这里总结了在Visual C++.NE转载 2015-04-14 17:37:15 · 330 阅读 · 0 评论 -
AfxGetApp()->GetMainWnd与AfxGetMainWnd的区别
近日,调试程序在工作线程中要使用到主对话框的一个成员变量,当时懒得使用参数传递的方式,直接在函数里面通过afxGetmainWnd获取主窗口指针再通过指针获取成员变量的值,结果运行时报0x000005错误,当把afxGetmainWnd换成AfxGetApp()->GetMainWnd时确一切OK,运行正常,查阅资料得知:AfxGetMainWnd获取的是当前窗口指针;AfxGetAp原创 2015-04-23 20:56:42 · 1112 阅读 · 2 评论 -
MFC中使用HALCON
HALCON对于机器视觉的学习者、开发者而言并不陌生,称其为机器视觉领域第一软件,亦无可厚非。HALCON对于视觉系统的控制、图像的处理和分析都能够较好的实现,尤其是各种图像处理算法。但就其本身而言,开发用户界面并不理想。用户界面以及对于其他底层的控制,比如和底层电路板、PLC等的控制和通信,可通过VC++、VB等进行开发。方便的是,HALCON恰恰能够被这些开发工具所调用,它支持C、C+转载 2015-04-23 21:02:58 · 1943 阅读 · 1 评论 -
将声音文件加入VC
概述 VC++是微软公司开发的一个IDE(集成开发环境),换句话说,就是使用c++的一个开发平台.有些软件就是这个编出来的...另外还有VB,VF.只是使用不同语言...但是, vc++是Windows平台上的C++编程环境,学习VC要了解很多Windows平台的特性并且还要掌握MFC、ATL、COM等的知识,难度比较大。Windows下编程需要了解Windows的消息机制以及回调(cal转载 2015-04-12 15:34:47 · 480 阅读 · 0 评论 -
栈,堆,全局,文字常量,代码区总结
在C\C++中,通常可以把内存理解为4个分区:栈、堆、全局/静态存储区和常量存储区。下面我们分别简单地介绍一下各自的特点。一. 区域划分堆: 是大家共有的空间,分全局堆和局部堆。全局堆就是所有没有分配的空间,局部堆就是用户分配的空间。堆在操作系统对进程初始化的时候分配,运行过程中也可以向系统要额外的堆,但是记得用完了要还给操作系统,要不然就是内存泄漏。栈:是个线程独有的,保存其转载 2015-04-12 14:11:05 · 340 阅读 · 0 评论 -
ADO在C++中的使用
最近程序中用到读写数据库,看了些例子,查了番MSDN,下面把详细步骤写出来,以备忘,或与同行共勉。读写数据库的技术很多,现在多用ADO。ADO以COM方式提供,所以它的很多行为遵循COM规范。首先,要引入ADO的COM文件,它的位置一般在"C:/Program Files/Common Files/System/ado/msado15.dll"。1. 引入ADO打开预编译头文件St转载 2015-04-12 14:02:31 · 468 阅读 · 0 评论 -
CString 和 LPCTSTR区别
CString LPCTSTR区别联系 CString是一个动态TCHAR数组,BSTR是一种专有格式的字符串(需要用系统提供的函数来操纵,LPCTSTR只是一个常量的TCHAR指针。CString 是一个完全独立的类,动态的TCHAR数组,封装了 + 等操作符和字符串操作方法。typedef OLECHAR FAR* BSTR;typedef const char * LPC转载 2015-04-12 15:32:38 · 633 阅读 · 0 评论 -
让用VS2012/VS2013编写的程序在XP中顺利运行
微软为了推销自家平台,默认配置下VS2012和VS2013编写的应用程序只能在Vista/Win7/Win8上运行。但幸好还保留了生成XP程序的设置项。XP和Win2003的用户还是大量存在的,我们程序软件的发布不能不考虑他们。 1. 项目菜单->项目属性->配置属性->常规->平台工具集,选择“VS2013WindowsXP(v120_xp)”; 2. 项目菜单->项目属性-转载 2015-04-12 14:00:11 · 533 阅读 · 0 评论 -
VC获取某文件的版本号
[cpp] view plaincopy//lpszFilePath 为某文件的完整路径 [cpp] view plaincopyCString GetFileVersion(LPCTSTR lpszFilePath) { CString szFilePath(lpszFilePath);转载 2015-04-12 13:50:26 · 1802 阅读 · 0 评论 -
VC 获取控件在对话框中的坐标
GetWindowRect是取得窗口在屏幕坐标系下的RECT坐标(包括客户区和非客户区),这样可以得到窗口的大小和相对屏幕左上角(0,0)的位置。GetClientRect取得窗口客户区(不包括非客户区)在客户区坐标系下的RECT坐标,可以得到窗口的大小,而不能得到相对屏幕的位置,它的top和left都为0,right和botton是宽和高,因为这个矩阵是在客户区坐标系下(相对于窗口客转载 2015-04-12 13:36:20 · 387 阅读 · 0 评论 -
VC中tab控件的使用
假如我现在有个SDI程序,View是Form View,想在上面放个Tab Control,包含两个Page。现在让我们来看看应该怎样处理。首先当然要增加一个Tab Control资源,然后利用Class Wizard,在View中增加一个Control变量。接着建立两个对话框资源,别忘了把Style改为Child,Border改为None。然后就可以在上面加其他控件了。接转载 2015-04-12 15:52:08 · 784 阅读 · 0 评论 -
VC对话框最小化到托盘
VC对话框最小化到托盘1.***dlg.h头文件设置:1)public:void setTray();//设置托盘NOTIFYICONDATA nid;//NOTIFYICONDATA结构包含了系统用来处理托盘图标的信息2)protected:// Generated message map functions//{{AFX_MSG(C***转载 2015-04-15 18:17:15 · 416 阅读 · 0 评论 -
调用约定__stdcall,__cdecl,_cdecl,_stdcall,__fastcall,_fastcall 区别简介
需要区别__stdcall和__cdecl两者的区别;#define CALLBACK __stdcall#define WINAPI __stdcall#define WINAPIV __cdecl#define APIENTRY WINAPI#define APIPRIVATE __stdcall#define PASCAL __stdcall#define c转载 2015-04-15 18:13:13 · 356 阅读 · 0 评论