Рисование на дочернем окне

15.10.2010
8
0
#1
Салют, господа!
Прошу Вашей помощи в борьбе с собственным недопониманием)

Есть окно, созданное в чужом процессе.
С помощью Get/SetWindowLong подменяю оконную процедуру этого окна на свою. При приходе определенной месаги создаю окно, родителем которой является это чужое окно (т.е. дочернее оно).
Все бы хорошо, но на созданном окне я не могу ничего нарисовать. В смысле BeginPaint...EndPaint не катит.

Пробовал брать hdc родителя и рисовать на него (что, логично, должно работать) - результат такой же (пустое окно).
Вот, на всякий случай WM_PAINT из оконной процедуры этого дочернего окна
Код:

C++:
case WM_PAINT:
{
RECT rt;
GetWindowRect(hWnd,&rt);
HDC LtmDC = GetDC(GetParent(hWnd));
HDC TmpDC = CreateCompatibleDC(LtmDC);
HBITMAP TmpBMP = CreateCompatibleBitmap(TmpDC,rt.right,rt.bottom);
HBITMAP oldTmpBMP = (HBITMAP)SelectObject(TmpDC,TmpBMP);

HBRUSH brsh=CreateSolidBrush(RGB(128,0,0));
FillRect(TmpDC,&rt,brsh);
SetBkMode(TmpDC,TRANSPARENT);
SetTextColor(TmpDC,RGB(0,128,0));
DrawText(TmpDC,L"Tap to close",12,&rt,DT_CENTER|DT_VCENTER);	

BitBlt(LtmDC,rt.left,rt.bottom,rt.right-rt.left,rt.bottom-rt.top,TmpDC,0,0,SRCCOPY);

SelectObject(TmpDC,oldTmpBMP);
DeleteObject(TmpBMP);
DeleteObject(brsh);
ReleaseDC(GetParent(hWnd),LtmDC);
}
break;

Буду благодарен за помощь!

P.S.: сообщения к окну приходят нормально.
 

lazybiz

Well-known member
03.11.2010
1 339
0
#2
Вот эта функция тебе поможет если с умом применить: SetWindowSubclass
 

DarkKnight

Well-known member
01.08.2010
653
0
#7
Разницы нет, совершенно, получаешь HANDLE, HWND и делай все что угодно, так же как и на рабочем столе рисловать можно хохламу, самое главное это вовремя рисунок обновлять, так что зазницы нет... Отслеживай обновления окна или постоянно его перересовывай....
Почитай WinApi - точно поможет.... Если точно по классам не определился используй FindWindow();.... Если нужно, используй Hooks.... Вообщем все в твоих руках...
Считаю тему тривиальной не требуещей примеров, пока автор не напишит точно, в каком направлении он будет двигаться и начальный код...
Рассмотрение данного аспекта явно выходит за пределы форума... По-этому тему надо конкретизироваться...