首页

说一说那些Win95中奇怪的函数

楔子 如果你回过头来观察一下Win95系统中的文件,你会发现系统中会有一些奇怪名字的内部函数,例如BEAR35,BUNNY73和PIGLET12。这后面肯定有什么故事吧? 当然有故事! “Bear”是Windows3.1吉祥物的名字。Dave是当时Windows 3.1开发组的最资深工程师,他会随身携带一只可爱的玩具熊。如果有一天他走进你的办公室,他可能会将这只玩具熊丢到你...

为什么Win95不能在1G以上内存的机器上启动

简单版本 如果你的机器的内存高于480MB,则Win95将启动失败。(话说在当时,480MB的内存已经是一个非常大的内存了。要知道Win95的目标运行环境是一台配备有4MB内存的385SX,或者一台带有16MB的高配机器。如果根据摩尔定律,要经过差不多7年的时间,我们才需要考虑一台配备有480MB内存的机器的问题。我的一个朋友拥有一台96MB内存的机器,经过测试,机器能正常启动。) 到了Win98...

滚动条第8章节:关于Resize消息处理的一个小细节  

关于窗口Resize的另一个小问题 强制滚动条的整数型滚动可以解决界面绘制出现一根线的问题,但是当我们拖动窗口的上下边缘来调整窗口大小时,我们会发现:当窗口被试图拖到到一个非整型的大小时,窗口的大小调整反馈和实际的窗口大小不一致。 要更加清晰地观察到以上现象,需要启用系统中的”拖动时显示窗口内容”选项。 如何解决 通过WM_SIZING消息,我们可以在窗口大小调整时修正调整...

为什么我不能去掉”仅用于测试”的标志?

有这么个问题。 “我有时候会使用一款软件的试用版本(或者说评估版本),它会显示’当前版本为试用版’的标志。我可以去掉这些标志吗?” 是这么回事儿。 添加这个标志,主要是为了防止有些OEM厂商销售这些安装了试用版本的机器,而不是正式销售版本的。(这种事已经发生过很多次了) 另外,有时候我们还会看到有些驱动上会带上”只用于测试”的...

段子一篇: 为什么注册表,有时候也称作”hive”?

今天就不讲技术了,分享一则段子 为什么注册表有时候也称它为”hive”? 话说有一位Windows NT的开发者十分讨厌蜜蜂。他的一位同事负责注册表模块的实现,知道这个情况后,想搞搞恶作剧。于是他将注册表的实现过程中的涉及到的相关概念都用和蜜蜂有关的词来引用。 比如,注册表叫做”hive”,注册表里的数据存储在”cells”里...

滚动条第7章节: 取整的问题  

一个小问题 当你尝试调整一个窗口的大小时,你会发现在屏幕的底部会出现一条很小的线。通常这不是个大问题,但是当你在一个列表里滚动内容到列表的最后一行时,例如,你按下了End按键。这个时候,你会注意到有一块黑色的空白区域出现在底部。当这个黑色区域十分靠近上面所说的线时,用户会觉得十分奇怪,而当用户也是一位程序员时,他会觉着:是不是绘制代码里少加(减)了个1? 解决方法 我们可以通过将窗口大小强行设置为...

新技巧GET: 使用gdbserver来调试Linux CMake工程  

关于Gdbserver Gdbserver是一个运行在Linux上的调试工具,用于调试Linux上运行的应用程序。当目标系统是一个嵌入式系统时,可能因为资源的限制而不能运行全功能版本的gdb,这个时候gdbserver就显得格外的有用了。 Visual Studio 2019 v16.5 Preview 1添加了一项新的特性:使用gdbserver对CMake工程进行远程调试。在之前的一篇文章中,...

滚动条第6章节:鼠标滚轮的处理  

鼠标滚轮的处理 鼠标滚轮的处理会稍微棘手一点,因为在UI设计规范中,当用户滑动鼠标滚轮的时候,需要将内容视图滚动一个预定义的”量”,这里的”量”实际上是一个WHEEL_DELTA(也叫detent)的值。 在上面的需求中,有两个不容易察觉的地方:第一,具体需要滚动的量来自于一个系统设定,我们必须遵从这个设定,第二,某些鼠标会报告给操作系统:它的滚动量...

使用Visual Studio在Linux Docker容器中编译C++程序  

楔子 Docker容器,提供了一个集编译,测试和部署的统一开发环境。通过将虚拟化的操作系统,文件系统,环境变量,库以及其他依赖库通通封装到一个Image中,实现了在开发者或者机器之间的简单共享。这个特性对于C++跨平台开发者来说十分有用,因为你可以在一种开发环境中开发出是面向不同目标平台的程序。 今天的主题 今天我们来讲讲,通过使用Visual Studio对本机CMake的支持,实现在一个Lin...

古老的Win95: DLL资源的限制

楔子 今天来说一则古老的历史问题。 16位的”影子DLL” 当Win9x尝试加载一个32位的DLL并需要让外界访问其中的资源时,它会创建一个对应的16位的”影子”DLL,这样使得16位的代码(例如USER)能访问其中的资源。 这个影子DLL实际上是一个16位的资源DLL,它是从其对应的32位DLL中转化而来。具体来说,就是系统将32位DLL中的资源复...