gpt4 book ai didi

c++ - Win32 选项卡控件中的右对齐选项卡项

转载 作者:太空宇宙 更新时间:2023-11-04 14:23:55 31 4
gpt4 key购买 nike

我正在尝试在 Win32/c++ 中创建一个选项卡控件,它的选项卡按钮从右到左对齐。 WS_EX_LAYOUTRTL 标志对我没有帮助,因为它完全反射(reflect)了选项卡项和选项卡页面内容的绘图。应用程序本身会自动处理镜像(这是一个跨平台的 UI 解决方案),这也是我们不使用 WS_EX_LAYOUTRTL 标志的原因(我们以通用方式为所有 UI 框架/平台实现了镜像)。

一种解决方案是在子类 TabCtrls 窗口过程中覆盖 TCM_GETITEMRECT 和 TCM_HITTEST。这使我能够很好地移动按钮,但鼠标事件仍然作用于控件“知道”按钮实际所在的位置(即第一个按钮上的鼠标悬停使最左边的按钮无效 - 坐标未镜像)。

所以这对我来说似乎是一条死胡同。

另一种可能性是在第一个选项卡按钮之前插入填充,将它们全部推到右边缘。不过,我还不知道该怎么做。 Visual Studio 展示了这个小对话框:

Visual Studio Properties dialog

他们是如何将按钮放在第一个标签页前面的?知道这一点将使我能够解决这个问题。

更新,解决方案:我的问题的解决方案是使用内置的 RTL 支持。为此,选项卡控件必须同时具有 WS_EX_LAYOUTRTL 和 WS_EX_NOINHERITLAYOUT 标志。这将保留所有现有绘图代码的功能,同时仅镜像 TabCtrl 按钮。我没有意识到 ES_EX_NOINHERITLAYOUT 标志出现在父级(TabCtrl)上,这就是我寻找最初描述的解决方法的原因。

不过,作为引用,我仍然很想知道原始问题的答案。

最佳答案

如果您查看 spy 应用程序,您会发现它实际上不是普通的 Windows 选项卡控件,而是自定义的东西,绘图是由父窗口 AFAIK 完成的:

VS6 and WinSpy++

Visual Studio 和 Office 都使用了大量的自定义控件,一些功能在几年后进入了通用控件,一些功能保持私有(private)......

关于c++ - Win32 选项卡控件中的右对齐选项卡项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5555136/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com