我正在尝试创建一个制表符控件,在Win32 / c ++中,制表符按钮从右到左对齐。 WS_EX_LAYOUTRTL标志对我没有帮助,因为它完全反映了选项卡项和标签页内容的图形。应用程序本身自动处理镜像(这是一个跨平台的UI解决方案),这也是我们不使用WS_EX_LAYOUTRTL标志的原因(我们已经为所有UI框架/平台以通用方式实现了镜像)。
一种解决方案是在子类TabCtrls窗口过程中覆盖TCM_GETITEMRECT和TCM_HITTEST。这使得我可以移动按钮,但鼠标事件仍然会作用于控件“知道”按钮实际所在的位置(即,鼠标悬停在第一个按钮上使最左边的按钮无效 - 坐标不会被镜像)。 / p>
所以这对我来说似乎是个死胡同。
另一种可能性是在第一个标签按钮之前插入填充,将它们全部推到右边缘。但是,我无法弄清楚如何做到这一点。 Visual Studio运行这个小对话框:
他们是如何将按钮放在第一个标签页的前面的?知道这一点可以让我解决这个问题。
更新,解决方案: 我的问题的解决方案是使用内置的RTL支持。为此,选项卡控件必须同时具有 WS_EX_LAYOUTRTL和WS_EX_NOINHERITLAYOUT 标志。这将保留所有现有绘图代码的功能,同时仅镜像TabCtrl按钮。我没有意识到ES_EX_NOINHERITLAYOUT标志位于父级(TabCtrl)上,这就是我寻找最初描述的解决方法的原因。
作为参考,我仍然很想回答原来的问题。
答案 0 :(得分:0)
如果您看一下间谍应用程序,您会看到它实际上不是一个普通的Windows选项卡控件,而是自定义的东西,而绘图是由父窗口AFAIK完成的:
Visual Studio和Office都使用了很多自定义控件,一些功能在几年后进入通用控件,一些功能保持私密......