首页

使用消息过滤器找回丢失的线程消息  

如前面的文章所提到的,线程消息在模态循环中会丢失,因为消息分发器(Message Dispatcher)不知道应该如何分发此消息。但是,如果模态循环能支持的话,我们有一种方法可以在它们消失之前看到它们。 WH_MSGFILTER 消息钩子可以用来接收传递给 CallMsgFilter 函数的消息。幸运的是,窗口管理器中的所有模态循环都使用 CallMsgFilter 来允许线程在线程消息丢失之前捕...

消失的线程消息  

在上一篇文章中,我们介绍到,模态消息循环会吃掉线程消息。 今天的文章中,我们将会演示这个场景,并在将来的文章中尝试修复这个问题。 还是基于我们的例子程序,然后做一些修改,如下图所示: 试着运行这个修改后的例子程序,你会发现,它会每隔2秒钟发出蜂鸣声,至少大部分时间它是这样的。 如果你右键单击标题栏或抓住窗口边缘开始调整大小或拖动滚动条或执行拖放择或显示消息框,则蜂鸣声会停止。 那是因为,所有上...

Visual Studio 调试启动时会卡几十秒钟  

今天在鼓捣 Topomel Box 的时候,发现这么一个问题:工程启动调试后,VS会彻底无响应,时间会持续大概半分钟左右,然后才会开始正常的调试。 我是百思不得其解。 经过测试发现,其他DLL工程都可以正常调试,就是主程序工程有这个问题。说明问题出现在这个工程里。 因为调试时我经常需要用的,每次耽搁这么半分钟,那可太不方便了。叔可忍婶不可忍。 其他的工作项不得不先停一停,得专心研究这个问题。 继续...

模态消息循环会吃掉线程消息  

线程消息(例如,你通过PostThreadMessage发送给线程的消息)在传递给DispatchMessage函数的时候,不会去任何地方。 如果你仔细琢磨一下,就会明白,这是很显然的一件事情:因为这个线程消息没有关联到一个窗口句柄。DispatchMessage对这种没有关联窗口的消息,它不知道如何处理。 它不得不将这个消息简单地丢弃。 这对进入模态循环的线程产生了可怕的后果,任何带有窗口的线程...

MSVC 和 Visual Studio 代码诊断的未来  

我们正在努力改进 MSVC 和 Visual Studio 中的诊断体验。 我们从 Visual Studio 2022 版本 17.3 开始这项工作,虽然还没有开发完成,但我们想在这里分享早期的进展。 动机与原则 新的 C++ 特性(如 Concept 和 Range)为更具表达力的代码和定义更好的 API 提供了机会。 然而,为了充分利用它们,集成开发环境需要对代码进行更好的诊断,以便查明和...

Visual Studio现已支持 C++ 开发容器  

今天我们很高兴与你分享一则消息:我们在Visual Studio 2022 17.4中为使用了CMake Presets的C++工程加入了开发容器(Dev Containers)支持。 容器是打包所有组件以运行应用程序的好方法。 通过 Dockerfile 捕获所有先决条件,以便在部署和运行容器的任何地方都有一致的运行时环境,Dev Containers 扩展了这个概念,以捕获在容器中开发和构建应...

新的例子程序  

我想,是时候修改下我们一直以来使用的例子程序的代码了。我听说最近有一门新的语言叫C++,它看起来变得非常流行。那我也赶一下时髦。 代码如下 首先,我定义了一个Window窗口类,里面包含一些创建一个窗口所需要的各种小部件,例如窗口句柄,注册窗口,创建窗口,窗口处理过程函数等。类的头文件如下图所示: 接下来,是对应的类实现代码。 我们还定义了一个继承自Window的类RootWindow,重写...

说说安腾处理器的双栈设计  

去年的时候,我曾提到,在安腾(Itanium)处理器上有两个栈。 传统上的”栈”(包括SP寄存器所指的那个栈)是一个手动管理的内存块,函数可以从中分配空间以在执行期间使用。 举个例子,如果你声明一个局部变量: TCHAR szBuffer[MAX_PATH]; 那么,这个缓冲区将会在上面所说的栈中分配内存。 但是,不是所有的局部变量都分配在这个栈中。 回想一下,安腾处理器上...

设备上下文(DC)画刷的妙用  

当我们调用GetStockObject(DC_BRUSH),所返回的是一个与设备上下文(Device Context,简称DC)相关联的DC画刷。它和系统颜色画刷有点类似,DC画刷的颜色会动态修改。但它们俩有个区别:系统颜色画刷的颜色会根据系统的颜色动态修改,而DC画刷的颜色是根据你下发的指令来修改。 当你在很短的时间内需要一个纯色颜色画刷的时候,DC画刷是比较方便的,因为它总是存在于系统中,所以...

向Visual Studio Code导入ST项目  

在ARM处理器的世界,有着很多的半导体厂家,其中最大之一是ST。 ST拥有大量的产品型号,这些产品具有多种功能以及用于它们对应的开发板。ST自家也提供了一个开发环境STM32CubeIDE,用来在ST设备上进行开发。另外他们也提供了一个配置工具STM32CubeMX,它用于配置设备属性并生成项目的配置信息。 如果你已经参与过基于ST的项目,我不会告诉你任何新内容。你可能不知道我们为在 Visual...