C++ XP滚动条在Windows7/Vista中失控

C++ XP滚动条在Windows7/Vista中失控,c++,winapi,mfc,windows-xp,windows-vista,C++,Winapi,Mfc,Windows Xp,Windows Vista,我有一个XP应用程序(win32 C++),我刚刚在Windows7下测试(实际上是vista,但在Windows7中也有同样的功能) 我感到惊讶的是,实际上我遇到的唯一问题是: 复杂的无模型对话框中的所有滚动条都不能正常工作。主要的问题是滚动拇指没有响应-如果你尝试移动它,它只是保持在锁定的位置。一直到win98、win2000和winxp都没有问题。仅在Windows7/Vista中 但是这个对话框中的滚动条并没有共同之处来解释它:一个是通过资源文件创建的纯richtext控件。另一个是通过

我有一个XP应用程序(win32 C++),我刚刚在Windows7下测试(实际上是vista,但在Windows7中也有同样的功能)

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

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

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


所以我想这可能是几年前第一次移植到Window7/Vista时遇到的最多的问题,但我现在在google中找不到任何东西。

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

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

不,我以前从没见过这个。您正在对滚动条进行任何自定义吗?你能在另一个项目中重新编程吗?这里有其他人也有同样的问题,所以我不是第一个:但是这里提供的确保控件有父控件的解决方案不是我的代码的问题,因为我指定了父控件(在两种情况下,使用CreateWindow时)。至于自定义,我调用ShowScrollBar,启用滚动条,并在创建后设置滚动信息。但正如我所说,对于所有以前版本的Windows,这一切都可以正常工作。只是Vista,Windows 7做了一些奇怪的事情。仅供参考-我在三台不同的机器上试过这个-两台运行Vista,另一台运行Windows 7的笔记本-在这三台机器上的行为完全相同。你在三台不同的机器上试过相同的应用程序;这并不能告诉我太多。更有趣的问题是,是否可以创建一个调用相同函数并复制相同行为的新项目。如果是这样的话,请用代码更新你的问题,有人会查出来。不,我以前从未见过这个。您正在对滚动条进行任何自定义吗?你能在另一个项目中重新编程吗?这里有其他人也有同样的问题,所以我不是第一个:但是这里提供的确保控件有父控件的解决方案不是我的代码的问题,因为我指定了父控件(在两种情况下,使用CreateWindow时)。至于自定义,我调用ShowScrollBar,启用滚动条,并在创建后设置滚动信息。但正如我所说,对于所有以前版本的Windows,这一切都可以正常工作。只是Vista,Windows 7做了一些奇怪的事情。仅供参考-我在三台不同的机器上试过这个-两台运行Vista,另一台运行Windows 7的笔记本-在这三台机器上的行为完全相同。你在三台不同的机器上试过相同的应用程序;这并不能告诉我太多。更有趣的问题是,是否可以创建一个调用相同函数并复制相同行为的新项目。如果是这样,请用代码更新您的问题,有人会检查它。