Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Не обновляется информация на прозрачном Edit-е


Автор: piritus 1.9.2009, 14:12
Приветствую.
Создал диалог, на него кинул плоский EditBox.
Обрабатываю сообщение WM_CTLCOLOREDIT:
Код

SetBkMode(wParam,TRANSPARENT);
SetTextColor(wParam,RGB(165,85,42));
return GetStockObject(NULL_BRUSH);

Пишу что-нибудь в edit-е:
user posted image

нажимаю 2 раза Backspace:
user posted image

Ввожу "123":
user posted image

Т.е. каретка переводится, символы удаляются, но на экране они остаются.
Такое свойство наблюдается только при установке прозрачности EditBox-а:
Код

SetBkMode(wParam,TRANSPARENT);


Пробовал вызывать UpdateWindow с хендлом edit-а, но не помогает.

Подскажите, пожалуйста, решение.

Автор: GremlinProg 7.9.2009, 17:40
это не прозрачность, это опять невосстановление фона, как и в случае с WM_ERASEBKGND (в пред. теме)
а символы тут удаляются, как положено

Автор: piritus 7.9.2009, 19:18
Так понимаю, что нужно:
Код

case WM_PAINT:{
...
    ::SendMessage(hWnd,WM_PRINTCLIENT,(WPARAM)hdc,PRF_CLIENT);
...
case WM_PRINTCLIENT:{
....
    ::SendMessage(::GetAncestor(hWnd,GA_PARENT),WM_ERASEBKGND,(WPARAM)hdc,0);
....
case WM_ERASEBKGND:{
    return TRUE;


Так?
И вот тут еще кое что нашел:
http://forum.vingrad.ru/topic-113380.html
Это к моему вопросу отношение имеет?

Автор: GremlinProg 7.9.2009, 23:26
Цитата(piritus @  7.9.2009,  21:18 Найти цитируемый пост)
Так понимаю, что нужно

да, примерно так, если подразумевается прозрачность в цепочке:
родитель - ребенок(Edit),
или пра-родитель - родитель - ребенок(Edit) и т.д.,
но не десктоп(план с чужими окнами) - ... - ребенок(Edit) [этот случай мы уже разобрали]

причем поддержку WM_PRINT/CLIENT нужно делать во всех промежуточных компонентах (всех родителях), если требуется "просвечивать" их все
Цитата(piritus @  7.9.2009,  21:18 Найти цитируемый пост)
И вот тут еще кое что нашел:http://forum.vingrad.ru/topic-113380.htmlЭто к моему вопросу отношение имеет?

да, конечно относится, если не хочешь, чтобы весь этот прозрачный "организм" перемаргивал,
но, в принципе, пример из темы о прозрачности решает эти проблемы,
т.е. это воплощение того плана непосредственно в коде (двойной буфер с WM_PRINT)

Автор: piritus 8.9.2009, 08:14
ок, буду пробовать.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)