编程细节大荟萃

简介: sscanf_s中%c,%s后面需要在相应的参数后添加容量大小参数。例如:char szTemp[ MAX_PATH ] = { 0 };sscanf_s( "你好", "%s", szTemp, MAX_PATH );避免鼠标闪烁的一个很好的方法就是,在创建窗口的时候不要指定光标句柄。
  1. sscanf_s中%c,%s后面需要在相应的参数后添加容量大小参数。例如:
    char szTemp[ MAX_PATH ] = { 0 };
    sscanf_s( "你好", "%s", szTemp, MAX_PATH );
  2. 避免鼠标闪烁的一个很好的方法就是,在创建窗口的时候不要指定光标句柄。这样windows就不会在OnMouseMove等函数里面再重设鼠标了。但是这种方法,在MFC的程序中似乎行不通。但在MFC中,我们可以重写父控件的OnSetCursor(),这样父控件无法改变鼠标,子控件自己去处理鼠标也是不错的选择。
  3. 加载dll时,如果遇到无法找到文件,请注意,如果这dll内部也需要加载其他dll失败是,也会返回找不到文件。所以找不到文件,并不一定是dll文件不存在,或许是dll要加载的其他dll不存在。
  4. 在设置项目配置时,项目的所有路径不要使用$(SolutionDir)宏,或者用与Solution相关的其他宏,因为这样的配置在一个Project被包含到其他Solution后,原来的文件输出位置就变成了这个新solution的位置。可能会让你一时不知道文件到底输出到哪个文件,同时Post-Build Event等事件也会受到影响。
  5. 在做项目时,首先应该确保各个模块的代码版本是一致,不然会出现一些很诡异的bug。
  6. 联合编译首次编译工程时,后处理事件经常执行失败,这是其自己的bug。找出哪个文件拷贝失败,然后再后处理事件执行过程中将这些文件手动放入原目录即可执行成功。
  7. 控件的消息处理流程是,先传递给子窗口(子控件),然后子窗口处理完,可以选择是否传递给直接父窗口(手动调用相应父窗口处理函数)。所以,例如ActiveX控件在IE中想要拦截IE滚动条,那么只需在ActiveX控件中重写OnMouseWheel函数,最后返回TRUE即可,这样父窗口就无法处理了。
  8. 用CreateToolhelperSnaptShot可以枚举所有进程,进程内的所有信息。
  9. 程序崩溃的原因,不可能是内存泄露直接导致的,内存泄露不会引起任何崩溃问题,我们在程序中可以开启_CrtSetDbgFlag( MEM_CHECK | )(似乎是这个函数)。最终还是要归为资源违规访问上,但这种错误不容易发现。例如程序崩溃,可能是由于等待一个释放了的事件内核对象导致。所以有时我们在处理程序崩溃的bug的时候,首先要做的是确保所有的线程正常退出。另外如果一个dll内部出现了一些资源违规访问,那么我们也可以采用一些取巧的办法尽量不让程序弹出崩溃窗口,那就是不调用FreeLibrary,让系统去卸载dll(这个办法是万不得已才使用的)。
  10. 项目配置,我认为一般情况下都不应该以$(SolutionDir)或者$(SolutionPath)之类的宏参数,因为这些参数在某些情况下令人困惑。例如我们在另外一个解决方案中加入一个以前的工程,那么当我们编译这个工程的时候,会发现他的输出目录改变了,成为这个新解决方案的目录,那么原来写的一些的后处理事件,可能会有问题。但如果你早就预料到这些,并做了相应处理,也未尝不可。
  11. 使用SHFileOperation()可以直接删除一个非空文件夹(目录)。但这个函数使用时需要注意其中的ptFrom参数,这个参数可以用来指代一系列的路径。所以必须用两个结尾符(\0)来标记。另外,这个函数是一个上层函数(离系统比较远,哈哈)所以效率很差。所以如果需要效率的话,还是先删除一个文件夹下面的所有文件,然后再删除空文件夹。
  12. StringCchPrintf在填充一个buffer之后,会将未填充的部分,设为一个特殊的非零值。所以不要认为未填充的部分依旧是原来的值。
  13. string类型中的大小,不包含'\0'字符。
  14. 一般子控件只能在父控件的范围内显示,如果想要将子控件独立出来,那么我们通过切断父子关系,并设置新的父控件来达到目的。我们通过SetParent( NULL )可以起到切断父子关系的作用。然后再设置SetParent( GetDesktopWindow() )函数来将桌面作为子控件的父控件(父窗口)来让子控件独立。这种方法可以用来实现比如网页中ActiveX播放器全屏等功能。
  15. 在文件中有一个存档属性,表明文档是已经存档。如果勾选存档属性,表明此文件已经存档(主要供备份程序)。
  16. 在大型项目中,引用计数尤为重要。其直接关系到资源是否被销毁,或者需要重建。所以在处理引用中要格外小心。需要在处理时考虑到资源存在和资源不存在两种情况,才能让系统鲁棒起来。
  17. xcopy是vs项目配置中后处理事件的主角。xcopy命令式copy命令的扩展,copy命令只能复制文件,而xcopy可以复制目录,并且递归到该目录的所有子目录。所以xcopy功能比copy要强大很多。其中xcopy命令中有几个常用且重要的参数。\E是复制目录时将空目录也一起复制,\S是不复制空目录。\F是将复制的完整源路径和完整目标路径显示出来。\Y是复制时不必询问,所有操作都同意。
  18. sscanf_s函数是一个能将文本信息格式化到你想要的内容的重要函数。其中从文本中提取字符串是一个常用操作。但是提取时遇到白字符就结束。白字符包括空格,以及\t,\n在内的非打印字符。那么如果我们的文本中想要提取的内容中包含空格,而我们又要读取怎么办。相信吧,当你遇到一个觉得常见的问题,我们前辈早就考虑到了,他们是智慧的。在用sscanf_s提取字符串时,可以用%[ ]s中的"[ ]"来设置条件字符,符合[ ] 内的字符才会被读取。例如%[ A-Z ]s,那么我们提取时只会提取一连串的在A-Z范围内的字符。假如我们想遇到回车时才结束提取,那么我们可以用%[ ^\n ]s。其中的^表示取反的意思,意思是不是\n字符的都提取,遇到\n就结束。所以用%[ ^\n ]s可以让我们提取的字符串带空格。
相关文章
|
11月前
|
编解码 自然语言处理 算法
利用 PRIMO 重构 M87 黑洞图像,普林斯顿高等研究院成功将「甜甜圈」变身「金戒指」
利用 PRIMO 重构 M87 黑洞图像,普林斯顿高等研究院成功将「甜甜圈」变身「金戒指」
100 0
|
11月前
|
前端开发 安全 决策智能
博弈论(四)——产品经理绝地求生
博弈论(四)——产品经理绝地求生
88 0
|
11月前
|
机器人
首创!哈工大直接用微波驱控多自由度机器人,登上国际顶刊
首创!哈工大直接用微波驱控多自由度机器人,登上国际顶刊
|
11月前
|
机器学习/深度学习 编解码 算法
万字解读首篇「人脸复原」综述!南大、中山、澳国立、帝国理工等联合发布(2)
万字解读首篇「人脸复原」综述!南大、中山、澳国立、帝国理工等联合发布
164 0
|
11月前
|
机器学习/深度学习 编解码 算法
万字解读首篇「人脸复原」综述!南大、中山、澳国立、帝国理工等联合发布
万字解读首篇「人脸复原」综述!南大、中山、澳国立、帝国理工等联合发布
110 0
|
11月前
|
机器学习/深度学习 编解码 自然语言处理
万字解读首篇「人脸复原」综述!南大、中山、澳国立、帝国理工等联合发布(3)
万字解读首篇「人脸复原」综述!南大、中山、澳国立、帝国理工等联合发布
196 0
|
11月前
|
机器学习/深度学习 人工智能 编解码
DeepFake换头术升级:浙大新模型,GAN出一头秀发
DeepFake换头术升级:浙大新模型,GAN出一头秀发
222 0
|
量子技术
挑战唯物论?诺奖得主彭罗斯:意识产生可能是大脑内的「量子叠加」的结果
量子物理学取得了巨大成功,但其解释仍然不确定。大脑由神经元组成,而神经元又由分子组成,很可能会受到量子效应的影响。量子力学和神经科学能否融合成「量子意识」理论?
248 0
挑战唯物论?诺奖得主彭罗斯:意识产生可能是大脑内的「量子叠加」的结果
|
机器人
敏捷如黄蜂!MIT华人助理教授造出「厘米级」类昆虫机器人
MIT华人助理教授Kevin Chen成功造出能够飞行的厘米级类昆虫机器人,不仅能飞,还能翻筋斗,实现了仿生昆虫无人机一大飞跃。
135 0
敏捷如黄蜂!MIT华人助理教授造出「厘米级」类昆虫机器人

热门文章

最新文章