c++ - XP 滚动条在 Windows7/Vista 中乱七八糟

标签 c++ winapi mfc windows-xp windows-vista

我有这个 XP 应用程序 (win32 C++),我刚刚在 Windows7 下测试(实际上是 vista,但它在 Windows 7 中做同样的事情)。

令我惊讶的是,实际上我遇到的唯一问题如下:

复杂的无模型对话框中的所有滚动条都不能正常工作。主要问题是滚动拇指没有响应 - 如果您尝试移动它,它只会保持锁定在原位。一路回到win98、win2000、winxp都没有问题。只是现在在windows 7/Vista中

但是这个对话框中的滚动条没有共同点来解释它:一个是在通过资源文件创建的普通富文本控件中。另一个是通过 CreateWindow 创建的富文本。然而,第三个滚动条位于自定义窗口类中。它们都无法正常工作(尽管您可以通过右键单击并选择“滚动此处”使它们滚动)

所以我假设大多数人可能在几年前第一次移植到 Window7/Vista 时遇到过这个问题,但我现在在谷歌中找不到任何东西。

最佳答案

对于无模式对话框,您必须在主应用程序 GetMessage Loop 中运行 IsDialogMessage,因此无模式对话框的消息不受 TranslateMessage 和 DispatchMessage 的约束。所以我以前就是这样做的。但是,Vista/Win7 不喜欢 WM_MOUSEMOVE、WM_LBUTTONDOWN 和 WM_LBUTTONUP 像对话框那样被绕过(即它们需要留在主 App 消息循环中)。至少这是我的问题。我现在在主消息循环中检查这些消息类型,这解决了我的问题。不一定能解释。也无法解释为什么以前没有人遇到过这种情况(我猜可能是我设置的一些特殊性)。感谢那些调查此事的人。

关于c++ - XP 滚动条在 Windows7/Vista 中乱七八糟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8686314/

相关文章:

c++ - ‘binary_semaphore’ 尚未在 ‘std’ 中声明

c++ - 如何替换版本 g++5 的 bvector header

winapi - 我们可以在多个线程中同时使用 MakeCurrent() 两个 OpenGL 上下文吗?

windows - Windows NT 是否缓存或刷新 INI 文件写入内容?

winapi - windows下设置单个线程为实时优先级

c++ - MFC 主 UI 线程工作和模式对话框

c++ - 优化字符串创建

c++ - QGenericMatrix 如何从行/列返回特定值

c++ - 创建新的 C++ 控制台应用程序后出错

c++ - 当控件定义了 ON_NOTIFY_REFLECT 时,ON_NOTIFY 在我的对话框中不起作用