Выровненные по правому краю элементы вкладки в элементе управления вкладки Win32 - PullRequest
1 голос
/ 05 апреля 2011

Я пытаюсь создать элемент управления табуляции, в котором кнопки табуляции выровнены справа налево в Win32 / c ++. Флаг WS_EX_LAYOUTRTL мне не помогает, поскольку он полностью отражает чертеж как для элементов вкладки, так и для содержимого вкладки. Само приложение автоматически обрабатывает зеркалирование (это решение для кроссплатформенного пользовательского интерфейса), что также является причиной того, что мы не используем флаг WS_EX_LAYOUTRTL (у нас зеркалирование реализовано в общем виде для всех каркасов / платформ пользовательского интерфейса).

Одним из решений было бы переопределение TCM_GETITEMRECT и TCM_HITTEST в процедуре окна TabCtrls с подклассами. Это позволяет мне правильно перемещать кнопки, но события мыши по-прежнему действуют в тех положениях, в которых элемент управления «знает», какие кнопки действительно находятся (т. Е. При наведении мыши на первую кнопку аннулируется крайняя левая кнопка - координаты не отражаются).

Так что, мне кажется, это тупик.

Другой возможностью было бы вставить отступ перед первой кнопкой табуляции, чтобы подтолкнуть их все к правому краю. Однако я не смог понять, как это сделать. Visual Studio поддерживает этот маленький диалог:

Visual Studio Properties dialog

Как они разместили кнопки перед первой вкладкой? Знание этого позволило бы мне решить эту проблему.

Обновление, решение: Решением моей проблемы является использование встроенной поддержки RTL. Чтобы это работало, вкладка должна иметь флаги WS_EX_LAYOUTRTL и WS_EX_NOINHERITLAYOUT . Это сохранит функцию всего существующего кода для рисования, пока только кнопки TabCtrl будут зеркально отображены. Я не осознавал, что флаг ES_EX_NOINHERITLAYOUT идет на родительский элемент (TabCtrl), поэтому я искал обходное решение, которое было описано ранее.

Для справки, мне все же любопытно получить ответ на первоначальный вопрос.

1 Ответ

0 голосов
/ 06 апреля 2011

Если вы посмотрите на шпионское приложение, вы увидите, что это на самом деле не обычный элемент управления вкладками Windows, а пользовательская вещь, и рисование выполняется родительским окном AFAIK:

VS6 and WinSpy++

Как Visual Studio, так и Office используют множество пользовательских элементов управления, некоторые функции через несколько лет входят в общие элементы управления, некоторые функции остаются закрытыми ...

...