WM_PRINTCLIENT для перекрытых элементов управления
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.220] |
|
|
Правила раздела C/C++: Системное программирование и WinAPI
FAQ Сайта (C++)
FAQ Форума
Наши Исходники
Поиск по Разделу
MSDN Library Online (Windows Driver Kit)
Google
WM_PRINTCLIENT для перекрытых элементов управления
|
Сообщ.
#1
,
|
|
|
|
Здравствуйте. Есть диалоговое окно - родитель. На нём расположено 2 дочерних Static элемента, при чем один перекрывает другой частично. Можно ли через WM_PRINTCLIENT на видимом "верхнем" Static элементе отобразить фон от перекрытого (см. далее)? Требуется сделать без явного указания HWND перекрываемого элемента - хочу завернуть в сабклассинг все это дело и вызывать только процедурки инициализации/деинициализации своей отрисовки, а там уже свое рисовать что надо, главное только HWND самого статика подсовывать. Надеюсь понятно объяснил что требуется. Просто я запутался немного, впринципе нужен какой-нибудь GetParent, но только чтобы хэндл можно было узнать хэндл контрола, который перекрыт нашим рисуемым. Как проще это сделать? Требуется для отрисовки своих элементов управления.
|
|
Сообщ.
#2
,
|
|
|
|
Цитата Надеюсь понятно объяснил что требуется Боюсь, что нет. |
|
Сообщ.
#3
,
|
|
|
|
Ну пойдем другим путем. Вот шаблон.
![]() ![]() 101 DIALOGEX 0, 0, 150, 50 STYLE DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "Project" LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US FONT 8, "MS Shell Dlg", FW_NORMAL, FALSE, 1 { CONTROL "Static 1", 101, STATIC, SS_CENTER | WS_CHILD | WS_VISIBLE, 15, 15, 75, 10 CONTROL "Static 2", 102, STATIC, SS_CENTER | WS_CHILD | WS_VISIBLE, 5, 5, 100, 25 } Static2 перекрывает собой Static1 как видно из координат. Надо отрисовать фон Static1 на Static2 + фон от диалогового окна самого. Подменяю оконную процедуру Static2 и рисую что надо. В WM_PAINT для отрисовки фона от родительского диалогового окна использую код: ![]() ![]() // CallWindowProc(OldStatProc, GetParent(hWnd), WM_PRINTCLIENT, hdcMem, PRF_CLIENT) // Из hdcMem делаю BitBlt в HDC, полученный через BeginPaint. Теперь нужно позаимствовать фон от скрытого Static1, можно конечно например GetDlgItem(GetParent(hWnd), 101) использовтаь, но это привязка уже идет. Все "работы" проводятся только для Static2 и в процедуру для установки сабклассинга подается только HWND Static2, соответственно потом удаляется подобным способом эта нахлобучка - то есть указывается hWnd одного элемента и не важно сколько должно быть под ним еще контролов, но их содержимое надо стырить для отрисовки. Хочу в итоге сделать как-бы Transparent контрол и вдальнейшем на нем выводить текст, планирую приспособить под бегущую строку. Соответственно для закрашиваемого фона надо этот винегрет. |
|
Сообщ.
#4
,
|
|
|
|
А почему "как бы", почему не просто Transparent ?
Ну, примерно, как здесь: http://files.rsdn.ru/42164/ws_ex_transparent.zip |
|
Сообщ.
#5
,
|
|
|
|
Спасибо конечно, но это не то что хотелось. Мне не нужна простая отрисовка текста в окне (понятно что тут просто пустую кисть возвращают), я хочу сам выводить, например, свою анимацию и прочие графические прибамбасы.
Вобщем так, блин, чтобы уж совсем было понятно чего есть и чего надо. Есть вобщем процедура для подмены оконной функции на свою для отрисовки (создаю свой контрол так сказать, со своими сообщениями и т.д., просто не хочу оконный класс новый создавать, пойдет и обычный статик для таких целей). Ну, например, есть void CreateMyDrawControl(HWND hStatic), где выполняю подмену оконной процедуры этого hStatic и все. А в новой оконной процедурке обрабатываю WM_PAINT и WM_ERASEBKGND как мне надо. Все, больше ничего не делаю и в родитель не лезу для окучивания всяких там WM_CTLCOLORSTATIC и прочих прибамбасов - теперь я буду определять отрисовку, а не стандартная оконная процедура статика, так что здесь этот WM_CTLCOLORSTATIC идет лесом. Вот. |