首页

QuickInfo在VS2019中的改进:颜色和在线搜索  

2项新改进 Visual Studio系列中的QuickInfo提示,对于开发人员来说,是一项非常方便的特性。简单来说,QuickInfo可以在你编写代码的时候,实时显示当前编写代码的辅助信息,例如函数原型,数据类型等。 在Visual Studio 2019 (v16.1) 预览版3中,这项功能有了新的改进:添加了颜色及在线搜索功能。今天就来简单介绍一下这两个改进。 自定义QuickInfo提示...

小技巧:使用隐藏窗口解除组件间耦合  

问题 随着项目的规模逐渐变得大了起来,解决方案中的组件的个数和相互之间的关系也慢慢复杂起来。如果一个组件A显式调用另一个组件B,则我们认为这个组件A依赖于组件B。如果被依赖的组件B的接口发生变化,则组件A会受到影响,轻则需要重新编译,重则导致新Bug的引入。 改进方法 显式调用的优点在于使用简单,只需要组件的头文件和库文件即可实现组件代码调用,这样也带来了组件之间的强耦合。今天我们引入一种基于隐...

小技巧:使用对象机制实现组件初始化及销毁  

问题 最近在对一份代码进行重构的时候,发现在特殊情况下,组件的销毁接口会因为程序的异常而得不到调用,这个虽然不是什么大问题(整个程序都出现异常了,进程退出是即将发生的事情),但是对于有点完美主义的我来说,这个的的确确的,降低了程序的异常安全性。 解决方法 我们先来看下面一张图,它描述了程序改造之前的交互场景: 在上图中,我们在CWinApp对象的InitInstance中调用了组件的Init接口...

小技巧:使用DebugView进行远程调试输出  

问题 在一次开发过程中,远程机器已经进入了锁屏模式,这个时候如果想得到远程主机上的调试信息就比较困难了。那么,到底有没有办法呢? 解决方法 使用DebugView工具的远程调试输出功能,可以解决上述问题。 具体方法 1) 使用命令行工具(CMD)定位远程主机DebugView所在的目录,然后在命令行下执行:dbgview /a,执行此命令后,DebugView工具会以Agent模式运行。在这个模式...

实战经验:WM_COPYDATA在不同权限进程中的接收问题

问题 在一次开发中,需要使用到WM_COPYDATA方式来实现两个进程之间的数据传输。在网络上可以找到很多关于WM_COPYDATA的示例代码,而且代码结构也比较简单易懂,所以WM_COPYDATA的示例代码不是今天要详细讨论的内容。 今天的问题存在于两个不同权限的进程,例如发送端进程运行在普通用户账户下,而接收端进程则运行在管理员账户下。在这种情况下,发送端发送的WM_COPYDATA消息,将不...

实战经验:给应用程序添加代码签名  

问题 在一次开发过程中,碰到了这样一个问题:应用程序在VS2010中已经启用了”需要管理员权限”,但是当UAC提示框出现时,应用程序因为Windows安全机制的限制,无法访问UAC,也即应用程序无法使用SendInput来模拟鼠标和键盘操作。经过一番研究,发现应用程序需要做如下的配置,才能实现UAC界面的访问: 1) 强制应用程序以管理员权限启动,这个可以在VS2010中设...

实战经验:使用CFileDialog实现多个文件选择  

问题 最近需要实现文件选择的功能,要求是需要弹出系统标准的文件选择对话框,另外,允许用户选择多个文件。 解决方法 MFC中有一个类CFileDialog就是用来做这件事的,而且功能还挺丰富,今天只是使用它的一小部分特性。 直接上代码 以下代码实现了一个方法,该方法弹出文件选择对话框,允许用户选择多个文件,让点击确定时,以列表的形式,返回用户选择的所有文件。 vector<CString&...

实战经验:CRichEditCtrl插入图片(不止是位图)

问题 在一次功能开发中,我希望可以在CRichEditCtrl控件中插入一些图片,这些图片可能是位图(bmp),也可能是其他格式(jpg, png等)。   以下是一种思路 1) 图片文件可以通过GDI+中的Bitmap类来加载。 2) 如果要插入图片到CRichEditCtrl,则需要涉及到OLE对象的插入。可以这样理解,每一个图片文件都是一个OLE对象,这些OLE对象通过CRichE...

实战经验:通过类成员函数指针实现类方法调用

在开发中,有时候可能需要使用到类成员指针来调用类的方法。例如,可能会有一个函数调用表格,根据不同的情况调用表格中不同的类成员函数。今天使用一个简单的例子来讲述如何使用类成员函数指针。 类成员函数指针定义 因为函数是一个类的成员,所以它的指针定义有别于全局函数,格式如下: typedef 返回值(类名::*函数指针类型名称)(参数列表); 需要注意的地方 1) 使用typedef创建一个用户自定义类...

实战经验:通过WMI获取硬件序列号

如何标识一台机器 在开发中,有时候我们需要获取唯一标识本机的序列号,你可能会想到如下几种 1) MAC地址 2) CPU ID 3) 硬盘ID MAC地址 因为MAC地址可能会被修改,而且本机可能会有多张网卡,同时网卡的数量会随着网卡被启用或禁用而发生变化,所以暂时就不考虑使用MAC地址作为本机硬件标识了。 CPU ID 这个看起来不错,但是有个问题:CPU厂商有时候为了规避隐私问题,会对同一批次...