powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как правильно отцентрировать текст в Edit ?
9 сообщений из 9, страница 1 из 1
Как правильно отцентрировать текст в Edit ?
    #32475966
PavelT100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Раньше я использовал стиль WS_BORDER для создания Edit для редактирования одной строки.
Теперь WS_BORDER я убрал и отрисовываю рамку самостоятельно. Но после этого текст в Edit отображается сдвинутым вверх. Флаг ES_CENTER центрирует его не только по вертиали, но и по горизонтали, поэтому он не годится.
Как бы мне вернуть текст в исходное положение ?
Размеры GetClientRect(hWindow, &r), GetWindowRect(hWindow, &rw) не изменились. Выдают те же самые координаты.
...
Рейтинг: 0 / 0
Как правильно отцентрировать текст в Edit ?
    #32476980
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторРазмеры GetClientRect(hWindow, &r), GetWindowRect(hWindow, &rw) не изменились

Всё правильно. Бордер является неклиентской частью и ожирает кусок окна. Выравнивание придётся делать самому.
Все параметры такого рода (толщина бордера, толщина титлбара и пр.) берутся функцией GetSystemMetrics(...)

авторКак бы мне вернуть текст в исходное положение ?
Уменьши размер ЕДИТа на тощину бордера, а рамку рисуй не в нём, а вокруг него.

Или.
Оставь бордер и рисуй в неклиентской части свой бордер поверх стандартного.
...
Рейтинг: 0 / 0
Как правильно отцентрировать текст в Edit ?
    #32479810
PavelT100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо. Уменьшил размер EDITa, рамку нарисовал вокруг него, все почти получилось, за исключением одной детали: раньше, сверху от текста до рамки был пробел в 3 пикселя, а сейчас только 2. Вот как бы мне на 1 пиксел опустить текст ? где нибудь этот параметр выставляется ?
...
Рейтинг: 0 / 0
Как правильно отцентрировать текст в Edit ?
    #32480374
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не знаю, может и выставляется.
можно сделать так:
сделать однопиксельный бордер (это вроде делает стандартный WS_BORDER)
и потом его закрасить (хотя там какие-то напряги с рисованием в неклиентской части).

или

кстати, ты ж сщас сам рамкой рулишь, так отодвинь просто её на один пиксел вверх.
...
Рейтинг: 0 / 0
Как правильно отцентрировать текст в Edit ?
    #32480496
PavelT100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Рамкой я рулю, и отодвинуть ее могу, но тогда мне этот один пиксель прийдется закрашивать в цвет фона контрола, а он еще у меня и меняется в зависимости, от того имеет он фокус или нет. Все это мне видится довольно сложным решением.
...
Рейтинг: 0 / 0
Как правильно отцентрировать текст в Edit ?
    #32480503
PavelT100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WS_BORDER делает не однопиксельный бордер, а трехпиксельный, и при этом флаге, моя рамка выглядит как то криво, криво.
...
Рейтинг: 0 / 0
Как правильно отцентрировать текст в Edit ?
    #32481372
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
3 пиксельный он если у тебя окно 3-х мерное. Убери у него WS_EX_CLIENTEDGE

на счёт закраски - просто запоминай цвет фона окна. И вообще напиши отдельный класс и не мучайся :)
...
Рейтинг: 0 / 0
Как правильно отцентрировать текст в Edit ?
    #32481762
PavelT100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большое спасибо, за подсказку про WS_EX_CLIENTEDGE - действительно такой флаг назначался для этих едитов, причем внутри кода динамически. Я его убрал, бордер стал однопиксельный, повер него я нарисовал двухпиксельный DrawEdge, что мне и надо было. Все OK. Только вот теперь такой вопрос:
раньше нас вполне устраивала стандартная отрисовска трехмерного бордера. Но потом мы решили заменить фон окна с серого стандартного на другой - в нашем случае близкий к белому. После этого внешняя третья линия бордера серого цвета стала выделятся, оказывается раньше она сливалась с фоном окна и была не видна. Более точно цвет этот задается на уровне системных цветов Windows - COLOR_BTNFACE. Если изменить этот цвет и сделать его таким же как фон окна, все будет как прежде здорово, только конечно изменяться цвета фона кнопок и так далее, причем во всех приложениях, что совсем не здорово. Можно ли с помощью флагов или еще чего задать цвет этого внешней линии, или вообще заставить рисовать двухпиксельную рамку ?
...
Рейтинг: 0 / 0
Как правильно отцентрировать текст в Edit ?
    #32482074
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть например такой сложный путь (у меня была(и есть) похожая проблема с кнопками, но мне лень пока ещё...) на ходу менять палитру виндов. Нашёл тока одну функцию, которая меняет всю палитру, это не удобно. Можно покопаться в реестре и менять тока один параметр перед перерисовкой окна, потом восстанавливать его обратно. Это даже лучше, потому как (есть подозрение) если пользоваться АПИшной функцией замены цвета, может так случится, что винды каждый раз будут посылать всем живым окнам сообщение о том, что палитра сменилась... (ну и примерно ясно, какая будет цветомузыка в виндах... :)) Но может это и не так, хотя я видел вроде какое-то такое сообщение. Если это так, то в случае с реестром придётся посылать его своему окну руками.

На счёт флагов не знаю. Можно попытаться подменить функцию обработки сообщений окна и тогда можно и нужно будет рисовать свой бордер и свой текст. Я с кнопками такое делал, правда тока текст рисовал, зато выравнивал его куда хотел :) Вот до бордера и цвета фона пока не добрался.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как правильно отцентрировать текст в Edit ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]