在MFC中使用CStatusBarCtrl时,我使用GetItemRect获取CStatusBar中每个项目的界限。
但是我现在看到一个问题,我在exe中使用XP清单。它将不会返回正确的矩形,因此当鼠标位于控件的最右边时,我将不再正确识别。
可以使用以下方法测试该问题:
GetStatusBarCtrl().SetTipText(n - 1, _T("Test"));
创建CStatusBarCtrl并使用
SetPaneInfo
创建窗格时,将鼠标悬停在最右边的窗格上时,如上文本所示的文本将不可见。此问题已报告elsewhere。但是没有得到满意的答案。
我需要一个解决方案,否则变通会很棒。
最佳答案
我的第一个猜测是Vista和XP中的“ THEMES”之间的差异。请记住,如果使用的是CFrameWnd,则状态栏最右边的最后一个窗格中将包含一个抓取器控件。因此,看起来ComCtl32.dll中的更改可能可以解决此问题,从而为您提供了一个较小的矩形。我假设您只是看到比以前更小的rect.Width()?您不是在同时谈论较小的X和Y吗?
如果有必要,您可能想要查找正确的版本并与您的应用程序一起部署,或者使清单反映要使用的版本...
抱歉,我没有明确的答案,但是只有我想到了主题,因为如果我没记错的话,在VC6中,抓取器被添加到状态栏的顶部,或者状态栏被缩小了显示...
您可以使用的一种建议是检测运行的Windows版本,并假设该操作系统适用于该操作系统。抓取器的大小将与VScroll栏的大小相同,因此您可以自然地在运行时从最后一个单元格中删除那么多DLU(或像素),并根据该文本渲染文本。我必须回家并启动VC6,然后根据您在此处所说的内容查看它的工作方式...
我没有一个Vista VM可以方便地查看它默认安装的是哪个版本的ComCtl32.dll,但是我猜测他们在其中放入了一些代码来处理抓取器。
如果您有完整的示例代码,那也确实会让我更轻松。否则,我必须开始挖掘所有旧的VC6生成的代码,然后从那里开始...
一个有趣的测试是在我们认为可能会对此产生影响的片段上调用GetSystemMetrics,并查看它们在系统之间的差异。如果将Vista设置为“ Windows经典”模式,您仍然看到相同的结果吗?
另外,您的开发机器是哪台机器? Vista还是XP?
关于c++ - CStatusBarCtrl GetItemRect XP list ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/628933/