Здравствуйте Аноним, Вы писали:
А>Здравствуйте VladD2, Вы писали:
VD>>Можно и просто транспарент для окна поставить.
А>Проблема такая: Создан контрол (окно), сверху еще одно окно (child для контрола). В child окно вывожу текст. Оба окна сделал транспарентнымию. Но при смене содержимого окна старый текст не убирается, пока не перекрываю контейнер каким ни будь другим окном.
А>В обоих окнах OnEraseBkgnd:
А> ::SetBkMode(hDC, TRANSPARENT);
А> POINT pt={0,0}, ptp;
А> HDC pDc=::GetDC(m_pParent->m_hWnd);
А> MapWindowPoints(m_pParent->m_hWnd, &pt,1);
А> ::SetWindowOrgEx(pDc,pt.x, pt.y, &ptp);
А> ::SendMessage(m_pParent->m_hWnd, WM_ERASEBKGND,(WPARAM)pDc, 0L);
А> ::SetWindowOrgEx(pDc,0,0, &ptp);
А> ReleaseDC(pDc);
А>Как очистить child?
Блин. Ктоже так рисует? :)
Замени свой код на отрисовку в WM_PAINT или в этом, как его там, в OnDraw. Сам текст, графику и т.п. кэшируешь в переменных класса.
В месте где нужно обновить изображение вызывешь:
InvalidateVindow(NULL);
UpdateWindow();
При этом вызовутся WM_ERASEBKGND и WM_PAINT.
А вызывать WM_ERASEBKGND из отрисовки вообще нельзя.
Да и рисование нужно начинать (если конечно обрабатываешь WM_PAINT) с помощью BeginPaint, а завершать с помощью EndPaint.
Здесь
ftp://ftp.optim.ru/pub/Tests/TranspAx/TranspAx.zip лежит пример наклепанный мной. Ax реализованный на C++/ATL и тест не VB. В нем можно по изменять текст и посмотреть как отрисовывается Ax.