Я пытаюсь создать элемент управления табуляции, в котором кнопки табуляции выровнены справа налево в Win32 / c ++. Флаг WS_EX_LAYOUTRTL мне не помогает, поскольку он полностью отражает чертеж как для элементов вкладки, так и для содержимого вкладки. Само приложение автоматически обрабатывает зеркалирование (это решение для кроссплатформенного пользовательского интерфейса), что также является причиной того, что мы не используем флаг WS_EX_LAYOUTRTL (у нас зеркалирование реализовано в общем виде для всех каркасов / платформ пользовательского интерфейса).
Одним из решений было бы переопределение TCM_GETITEMRECT и TCM_HITTEST в процедуре окна TabCtrls с подклассами. Это позволяет мне правильно перемещать кнопки, но события мыши по-прежнему действуют в тех положениях, в которых элемент управления «знает», какие кнопки действительно находятся (т. Е. При наведении мыши на первую кнопку аннулируется крайняя левая кнопка - координаты не отражаются).
Так что, мне кажется, это тупик.
Другой возможностью было бы вставить отступ перед первой кнопкой табуляции, чтобы подтолкнуть их все к правому краю. Однако я не смог понять, как это сделать. Visual Studio поддерживает этот маленький диалог:
Как они разместили кнопки перед первой вкладкой? Знание этого позволило бы мне решить эту проблему.
Обновление, решение:
Решением моей проблемы является использование встроенной поддержки RTL. Чтобы это работало, вкладка должна иметь флаги WS_EX_LAYOUTRTL и WS_EX_NOINHERITLAYOUT . Это сохранит функцию всего существующего кода для рисования, пока только кнопки TabCtrl будут зеркально отображены. Я не осознавал, что флаг ES_EX_NOINHERITLAYOUT идет на родительский элемент (TabCtrl), поэтому я искал обходное решение, которое было описано ранее.
Для справки, мне все же любопытно получить ответ на первоначальный вопрос.