首页

小技巧:华为荣耀6如何自定义铃声  

如果你不是这样的人,请告诉我 你一定经历过这样的时刻:你会特别喜欢一首歌曲,或者一段电影配乐,亦或是一段来自美剧中的音乐片段。你会非常希望将它作为你的手机铃声(或者通知铃声)。 已经有一种方法了 你随时可以在手机自带文件管理器中,长按对应的音乐文件来设置为铃声。但是,今天我讲述的是一种比较Hardcore的方式,适用于: 1) 你存储在手机机身内存中或者SD卡中的音乐文件意外丢失了。 2) 你可能...

深度理解:WM_UPDATEUISTATE和WM_CHANGEUISTATE  

今天我们来聊一聊Windows里比较少用到的两个消息: WM_UPDATEUISTATE和WM_CHANGEUISTATE。 写这篇文章的原因,也是因为在开发中碰到一个界面绘制的问题,后来发现这个问题和这两个消息有关,当然了,这个问题在这里就不详细展开了,我可能会在另一篇文章里再写。 在讲述这两个消息之前,我先介绍一个概念:keyboard cues。我就先将它翻译成”键盘指示器...

错误信息:manifest authoring warning 81010002

开发环境:Win7 + VS2010 SP1 错误信息:manifest authoring warning 81010002: Unrecognized Element “compatibility” in namespace “urn:schemas-microsoft-com:compatibility.v1”. 当在应用程序中指定如下的清单文...

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

有时候会碰到一些奇怪的运行时问题,如标题所示。 当我们在VS中拖了一个控件到对话框模板上,我们通常会将这个控件绑定到一个变量上。例如,我们会将一个CButton绑定到一个按钮,将CEdit绑定到一个编辑框。如果没有给予特别的注意,就会出现如下的错误: Error: no data exchange control with ID 0xXXXX 并且,这个错误仅在Debug版本出现,而且它还是隐藏在...

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

MFC提供了编辑框控件CEdit,可以基本满足我们的一般性编辑需求,但是如果想对CEdit进行定制,例如重新设计其边框,对用户输入做预处理的时候,我们需要扩展CEdit。今天来看看ON_CONTROL_REFLECT和ON_CONTROL_REFLECT_EX这两个反射宏在CEdit扩展中的使用。 ON_CONTROL_REFLECT 从名称上来看,ON_CONTROL_REFLECT是一个反射宏...

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

碰到这样一个问题,需要获取当前运行系统的版本号。 对于Windows系统来说,主要需要关注的是两个版本号:主版本,次版本。例如:Windows 7系统的版本号为:6.1。Windows 10的版本号为:10.0。过去我们可以使用Windows API GetVersionEx来获取系统版本,但是从Windows8.1开始,如果程序没有进行Manifest(原谅我也不知道怎么翻译这个词比较合适,所以...

实战经验:采用MFC的CArchive将对象序列化到CMemFile中

在一次编程实验中,我碰到了这样一个问题:我需要将一个对象通过网络传输出去。 首先为了可扩展性,这个对象被设计为变长结构,也即我们事先不能知道它确切的长度。有些朋友会说,可以创建一个足够大的缓冲区来承载这个对象。嗯!当然是可以的。但是这样的设计不是最优的,因为网络带宽是有限的,从节省带宽的角度来说,使用大缓冲区肯定意味着有些不必要的数据和有效数据一起传输。另外,对象长度变长,缓冲区的最大尺寸,还真是...

深度理解:struct和class的区别  

C中struct和class的区别 1) 在C语言中,无class关键字,因此,如下的代码片段是无法通过编译的。 2) C语言中的struct不能定义函数,仅能定义数据成员。所以,我们通常使用struct来构建数据结构。 在如下的代码片段中,我们定义了两个数据成员,但是如果在这个结构体中尝试定义一个Play方法,则会编译失败。 C++中struct和class的区别 1) struct默认的...

实战经验:通过NotifyAddrChange侦测网络变化  

在一次实验中,我需要程序可以自动检测到网络变化,例如: 1) 某一个或某几个网卡被禁用 2) 某一个或某几个网卡的地址变化 NotifyAddrChange可以帮我做到这些。今天来讲一讲这个函数的用法及程序功能在架构阶段需要注意的地方。 如何使用NotifyAddrChange NotifyAddrChange函数主要的功能是用来通知应用程序IPv4地址的变化。注意这个函数仅仅支持IPv4地址的变...

深度理解:main函数的返回值  

最近碰到这样的一个问题:main函数的返回值的作用。 main函数的前世今生 每一个C程序都会有一个main函数作为入口点,这里所谓的入口点,也即程序一开始就会尝试找到main函数的位置,并从main函数的第一行代码开始执行。 那么,第一个问题:入口点之前是什么?main函数执行完之后,又是什么?这有点像:宇宙大爆炸之前的那一刻是什么状态? 我们来创建一个最简单的C程序,来看看入口点之前是什么? ...