• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

  • Автор темы bearpaw
  • Дата начала
B

bearpaw

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

Есть окно, созданное в чужом процессе.
С помощью 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.: сообщения к окну приходят нормально.
 
L

lazybiz

Вот эта функция тебе поможет если с умом применить: SetWindowSubclass
 
D

DarkKnight

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!