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

Тема в разделе "MS Visual C++", создана пользователем bearpaw, 25 ноя 2010.

  1. bearpaw

    bearpaw Member

    Регистрация:
    15 окт 2010
    Сообщения:
    8
    Симпатии:
    0
    Салют, господа!
    Прошу Вашей помощи в борьбе с собственным недопониманием)

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

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Вот эта функция тебе поможет если с умом применить: SetWindowSubclass
     
  3. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Код (C++):
        SetWindowSubclass( hWnd, wnd_proc, 0, 0 );
     
  4. bearpaw

    bearpaw Member

    Регистрация:
    15 окт 2010
    Сообщения:
    8
    Симпатии:
    0
    А как ещё можно?
    Пишу под WinCe, а там такой функции нет(
     
  5. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Извини, но такого подфорума здесь нет, и в этом я тебе не помогу... Если будешь делать под обычную винду - пиши!
     
  6. bearpaw

    bearpaw Member

    Регистрация:
    15 окт 2010
    Сообщения:
    8
    Симпатии:
    0
    Окей! Спасибо!
     
  7. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Разницы нет, совершенно, получаешь HANDLE, HWND и делай все что угодно, так же как и на рабочем столе рисловать можно хохламу, самое главное это вовремя рисунок обновлять, так что зазницы нет... Отслеживай обновления окна или постоянно его перересовывай....
    Почитай WinApi - точно поможет.... Если точно по классам не определился используй FindWindow();.... Если нужно, используй Hooks.... Вообщем все в твоих руках...
    Считаю тему тривиальной не требуещей примеров, пока автор не напишит точно, в каком направлении он будет двигаться и начальный код...
    Рассмотрение данного аспекта явно выходит за пределы форума... По-этому тему надо конкретизироваться...
     
Загрузка...
Похожие Темы - Рисование на дочернем
  1. vladden
    Ответов:
    1
    Просмотров:
    1.842
  2. ilya00
    Ответов:
    17
    Просмотров:
    1.775
  3. 123456789igor
    Ответов:
    1
    Просмотров:
    1.392
  4. sergg
    Ответов:
    11
    Просмотров:
    4.697
  5. ezus
    Ответов:
    3
    Просмотров:
    4.884

Поделиться этой страницей