Как мы можем выровнять текст по вертикали в окне редактирования? - PullRequest
7 голосов
/ 15 мая 2009

Я создал поле для редактирования как:

m_EditWnd.Create(m_hWnd, rect, NULL, ES_LEFT | ES_AUTOHSCROLL | WS_CHILD |
                                     WS_OVERLAPPED | WS_VISIBLE,
                 WS_EX_CLIENTEDGE | WS_EX_LEFT | WS_EX_LTRREADING);

Существует стиль для горизонтального выравнивания, как ES_CENTER для горизонтального выравнивания текста, но можем ли мы выровнять текст по центру?

Ответы [ 2 ]

1 голос
/ 28 июня 2018

У меня недостаточно репутации, чтобы комментировать, поэтому вот, возможно, полезный фрагмент очень старого вопроса!

Если вы укажете стиль WS_BORDER, текст будет автоматически центрирован по запросу. Поскольку OP использует WS_EX_CLIENTEDGE, граница рисуется в любом случае , поэтому добавление в этом стиле не должно быть проблемой.

Однако, WS_BORDER | WS_EX_CLIENTEDGE достигает только «частичного» вертикального центрирования.

Использование WS_BORDER | WS_EX_STATICEDGE обеспечивает правильное вертикальное центрирование, хотя, очевидно, тогда у нас немного отличается визуальный стиль от стиля, ориентированного на клиента. Для меня я мог бы жить с этим небольшим компромиссом, а не писать пользовательский элемент управления для редактирования.

1 голос
/ 03 апреля 2018

Я попробовал решение от @Aidan Ryan с небольшой настройкой, чтобы избежать еще одной проблемы, связанной с UI. Я перемещаю «SetWindowPos» в OnNCPaint () и вызываю функцию только один раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...