|
|
|
Как правильно отцентрировать текст в Edit ?
|
|||
|---|---|---|---|
|
#18+
Раньше я использовал стиль WS_BORDER для создания Edit для редактирования одной строки. Теперь WS_BORDER я убрал и отрисовываю рамку самостоятельно. Но после этого текст в Edit отображается сдвинутым вверх. Флаг ES_CENTER центрирует его не только по вертиали, но и по горизонтали, поэтому он не годится. Как бы мне вернуть текст в исходное положение ? Размеры GetClientRect(hWindow, &r), GetWindowRect(hWindow, &rw) не изменились. Выдают те же самые координаты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2004, 16:56 |
|
||
|
Как правильно отцентрировать текст в Edit ?
|
|||
|---|---|---|---|
|
#18+
авторРазмеры GetClientRect(hWindow, &r), GetWindowRect(hWindow, &rw) не изменились Всё правильно. Бордер является неклиентской частью и ожирает кусок окна. Выравнивание придётся делать самому. Все параметры такого рода (толщина бордера, толщина титлбара и пр.) берутся функцией GetSystemMetrics(...) авторКак бы мне вернуть текст в исходное положение ? Уменьши размер ЕДИТа на тощину бордера, а рамку рисуй не в нём, а вокруг него. Или. Оставь бордер и рисуй в неклиентской части свой бордер поверх стандартного. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2004, 07:57 |
|
||
|
Как правильно отцентрировать текст в Edit ?
|
|||
|---|---|---|---|
|
#18+
Спасибо. Уменьшил размер EDITa, рамку нарисовал вокруг него, все почти получилось, за исключением одной детали: раньше, сверху от текста до рамки был пробел в 3 пикселя, а сейчас только 2. Вот как бы мне на 1 пиксел опустить текст ? где нибудь этот параметр выставляется ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2004, 18:18 |
|
||
|
Как правильно отцентрировать текст в Edit ?
|
|||
|---|---|---|---|
|
#18+
не знаю, может и выставляется. можно сделать так: сделать однопиксельный бордер (это вроде делает стандартный WS_BORDER) и потом его закрасить (хотя там какие-то напряги с рисованием в неклиентской части). или кстати, ты ж сщас сам рамкой рулишь, так отодвинь просто её на один пиксел вверх. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2004, 10:15 |
|
||
|
Как правильно отцентрировать текст в Edit ?
|
|||
|---|---|---|---|
|
#18+
Рамкой я рулю, и отодвинуть ее могу, но тогда мне этот один пиксель прийдется закрашивать в цвет фона контрола, а он еще у меня и меняется в зависимости, от того имеет он фокус или нет. Все это мне видится довольно сложным решением. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2004, 10:58 |
|
||
|
Как правильно отцентрировать текст в Edit ?
|
|||
|---|---|---|---|
|
#18+
WS_BORDER делает не однопиксельный бордер, а трехпиксельный, и при этом флаге, моя рамка выглядит как то криво, криво. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2004, 11:01 |
|
||
|
Как правильно отцентрировать текст в Edit ?
|
|||
|---|---|---|---|
|
#18+
3 пиксельный он если у тебя окно 3-х мерное. Убери у него WS_EX_CLIENTEDGE на счёт закраски - просто запоминай цвет фона окна. И вообще напиши отдельный класс и не мучайся :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2004, 16:08 |
|
||
|
Как правильно отцентрировать текст в Edit ?
|
|||
|---|---|---|---|
|
#18+
Большое спасибо, за подсказку про WS_EX_CLIENTEDGE - действительно такой флаг назначался для этих едитов, причем внутри кода динамически. Я его убрал, бордер стал однопиксельный, повер него я нарисовал двухпиксельный DrawEdge, что мне и надо было. Все OK. Только вот теперь такой вопрос: раньше нас вполне устраивала стандартная отрисовска трехмерного бордера. Но потом мы решили заменить фон окна с серого стандартного на другой - в нашем случае близкий к белому. После этого внешняя третья линия бордера серого цвета стала выделятся, оказывается раньше она сливалась с фоном окна и была не видна. Более точно цвет этот задается на уровне системных цветов Windows - COLOR_BTNFACE. Если изменить этот цвет и сделать его таким же как фон окна, все будет как прежде здорово, только конечно изменяться цвета фона кнопок и так далее, причем во всех приложениях, что совсем не здорово. Можно ли с помощью флагов или еще чего задать цвет этого внешней линии, или вообще заставить рисовать двухпиксельную рамку ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2004, 19:24 |
|
||
|
Как правильно отцентрировать текст в Edit ?
|
|||
|---|---|---|---|
|
#18+
Есть например такой сложный путь (у меня была(и есть) похожая проблема с кнопками, но мне лень пока ещё...) на ходу менять палитру виндов. Нашёл тока одну функцию, которая меняет всю палитру, это не удобно. Можно покопаться в реестре и менять тока один параметр перед перерисовкой окна, потом восстанавливать его обратно. Это даже лучше, потому как (есть подозрение) если пользоваться АПИшной функцией замены цвета, может так случится, что винды каждый раз будут посылать всем живым окнам сообщение о том, что палитра сменилась... (ну и примерно ясно, какая будет цветомузыка в виндах... :)) Но может это и не так, хотя я видел вроде какое-то такое сообщение. Если это так, то в случае с реестром придётся посылать его своему окну руками. На счёт флагов не знаю. Можно попытаться подменить функцию обработки сообщений окна и тогда можно и нужно будет рисовать свой бордер и свой текст. Я с кнопками такое делал, правда тока текст рисовал, зато выравнивал его куда хотел :) Вот до бордера и цвета фона пока не добрался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2004, 08:21 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=32481372&tid=2035137]: |
0ms |
get settings: |
10ms |
get forum list: |
21ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
26ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 235ms |
| total: | 357ms |

| 0 / 0 |
