【发布时间】:2011-04-05 16:24:51
【问题描述】:
我正在尝试在 Win32/c++ 中创建一个选项卡控件,它的选项卡按钮从右到左对齐。 WS_EX_LAYOUTRTL 标志对我没有帮助,因为它完全反映了选项卡项目和选项卡页面内容的绘图。应用程序本身自动处理镜像(这是一个跨平台的 UI 解决方案),这也是我们不使用 WS_EX_LAYOUTRTL 标志的原因(我们以通用方式为所有 UI 框架/平台实现了镜像)。
一种解决方案是在子类 TabCtrls 窗口过程中覆盖 TCM_GETITEMRECT 和 TCM_HITTEST。这使我能够正确移动按钮,但鼠标事件仍然作用于控件“知道”按钮真正所在的位置(即,第一个按钮上的鼠标悬停会使最左边的按钮无效 - 坐标未镜像)。
所以这对我来说似乎是一个死胡同。
另一种可能性是在第一个选项卡按钮之前插入填充,将它们全部推到右边缘。不过,我无法弄清楚如何做到这一点。 Visual Studio 显示这个小对话框:
他们是如何将按钮放在第一个标签页的前面的?知道这一点将使我能够解决这个问题。
更新,解决方法: 我的问题的解决方案是使用内置的 RTL 支持。为此,选项卡控件必须同时具有 WS_EX_LAYOUTRTL 和 WS_EX_NOINHERITLAYOUT 标志。这将保留所有现有绘图代码的功能,而仅镜像 TabCtrl 按钮。我没有意识到 ES_EX_NOINHERITLAYOUT 标志在父级(TabCtrl)上,这就是我寻找最初描述的解决方法的原因。
不过,作为参考,我仍然很想知道原始问题的答案。
【问题讨论】:
标签: c++ winapi tabcontrol