首页

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

问题 在一次开发过程中,碰到了这样一个问题:应用程序在VS2010中已经启用了”需要管理员权限”,但是当UAC提示框出现时,应用程序因为Windows安全机制的限制,无法访问UAC,也即应用程序无法使用SendInput来模拟鼠标和键盘操作。经过一番研究,发现应用程序需要做如下的配置,才能实现UAC界面的访问: 1) 强制应用程序以管理员权限启动,这个可以在VS2010中设...
  • 阅读全文 |
  • 分类:技术 |
  • 发表于:05月14日 |
  • 浏览:2036 |
  • 评论已关闭 条评论

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

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

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

问题 在一次功能开发中,我希望可以在CRichEditCtrl控件中插入一些图片,这些图片可能是位图(bmp),也可能是其他格式(jpg, png等)。   以下是一种思路 1) 图片文件可以通过GDI+中的Bitmap类来加载。 2) 如果要插入图片到CRichEditCtrl,则需要涉及到OLE对象的插入。可以这样理解,每一个图片文件都是一个OLE对象,这些OLE对象通过CRichE...
  • 阅读全文 |
  • 分类:技术 |
  • 发表于:04月21日 |
  • 浏览:2087 |
  • 评论已关闭 条评论

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

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

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

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

深度理解:WM_UPDATEUISTATE和WM_CHANGEUISTATE  

今天我们来聊一聊Windows里比较少用到的两个消息: WM_UPDATEUISTATE和WM_CHANGEUISTATE。 写这篇文章的原因,也是因为在开发中碰到一个界面绘制的问题,后来发现这个问题和这两个消息有关,当然了,这个问题在这里就不详细展开了,我可能会在另一篇文章里再写。 在讲述这两个消息之前,我先介绍一个概念:keyboard cues。我就先将它翻译成”键盘指示器...
  • 阅读全文 |
  • 分类:技术 |
  • 发表于:03月17日 |
  • 浏览:2278 |
  • 评论已关闭 条评论

错误信息:manifest authoring warning 81010002

开发环境:Win7 + VS2010 SP1 错误信息:manifest authoring warning 81010002: Unrecognized Element “compatibility” in namespace “urn:schemas-microsoft-com:compatibility.v1”. 当在应用程序中指定如下的清单文...
  • 阅读全文 |
  • 分类:技术 |
  • 发表于:03月12日 |
  • 浏览:2546 |
  • 评论已关闭 条评论

运行时错误:Error: no data exchange control with ID 0xXXXX

有时候会碰到一些奇怪的运行时问题,如标题所示。 当我们在VS中拖了一个控件到对话框模板上,我们通常会将这个控件绑定到一个变量上。例如,我们会将一个CButton绑定到一个按钮,将CEdit绑定到一个编辑框。如果没有给予特别的注意,就会出现如下的错误: Error: no data exchange control with ID 0xXXXX 并且,这个错误仅在Debug版本出现,而且它还是隐藏在...
  • 阅读全文 |
  • 分类:技术 |
  • 发表于:03月12日 |
  • 浏览:2486 |
  • 评论已关闭 条评论

实战经验:ON_CONTROL_REFLECT(_EX)的在CEdit扩展中的使用

MFC提供了编辑框控件CEdit,可以基本满足我们的一般性编辑需求,但是如果想对CEdit进行定制,例如重新设计其边框,对用户输入做预处理的时候,我们需要扩展CEdit。今天来看看ON_CONTROL_REFLECT和ON_CONTROL_REFLECT_EX这两个反射宏在CEdit扩展中的使用。 ON_CONTROL_REFLECT 从名称上来看,ON_CONTROL_REFLECT是一个反射宏...
  • 阅读全文 |
  • 分类:技术 |
  • 发表于:03月10日 |
  • 浏览:2800 |
  • 评论已关闭 条评论

实战经验:在Windows 8.1/10上获取具体的系统版本号

碰到这样一个问题,需要获取当前运行系统的版本号。 对于Windows系统来说,主要需要关注的是两个版本号:主版本,次版本。例如:Windows 7系统的版本号为:6.1。Windows 10的版本号为:10.0。过去我们可以使用Windows API GetVersionEx来获取系统版本,但是从Windows8.1开始,如果程序没有进行Manifest(原谅我也不知道怎么翻译这个词比较合适,所以...
  • 阅读全文 |
  • 分类:技术 |
  • 发表于:03月03日 |
  • 浏览:2403 |
  • 评论已关闭 条评论