Копирование невидимого окна. HOW?

Тема в разделе "WASM.WIN32", создана пользователем sometime, 5 авг 2010.

  1. sometime

    sometime Odessa

    Публикаций:
    0
    Регистрация:
    22 апр 2009
    Сообщения:
    227
    Адрес:
    sunday
    Задолбался подбирать ключи поиска. Решил тему создать.
    Есть програма, у неё окно.
    Задача:
    Содержимое окна копировать на свое окно, но вот беда - как спрятать исходное окно так что бы оно перерисовывалось не смотря на то что оно невидимое или же за пределами десктопа?
     
  2. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    sometime
    PrintWindow что ли? В таком духе?
     
  3. sometime

    sometime Odessa

    Публикаций:
    0
    Регистрация:
    22 апр 2009
    Сообщения:
    227
    Адрес:
    sunday
    l_inc
    братишка, пасиб!!
    оч порадовал:)

    все работает, правда пока помигивает иногда - но с этим думаю что уже справлюсь!)
     
  4. sometime

    sometime Odessa

    Публикаций:
    0
    Регистрация:
    22 апр 2009
    Сообщения:
    227
    Адрес:
    sunday
    fuck!)
    не справился, весь день сижу и так и сяк - никак))
    чего оно мигает то, при таймере и в 50мс и в 500?
    слыхал о WM_PRINT - но мсдн говорит что по дефолту оно не обрабатываться в DefWindowProc - как его самому тогда реализовать, с помощью того же PrintWindow?))

    код обработки в моем окне:
    Код (Text):
    1.         case WM_TIMER:
    2.             if (wParam == DRAW_TIMER_ID) {
    3.                
    4.                 PrintWindow( EngineData.gr.hWnd,
    5.                              hBackDC,
    6.                              PW_CLIENTONLY );
    7.  
    8.                 //SendMessage( EngineData.gr.hWnd,
    9.                 //             WM_PAINT,
    10.                 //             (WPARAM)hBackDC,
    11.                 //             PRF_CLIENT | PRF_OWNED );
    12.  
    13.                 InvalidateRect( EngineData.pl.hDllWnd,
    14.                                 NULL,
    15.                                 FALSE );
    16.  
    17.                 return FALSE;
    18.             }
    19.             break;
    20.  
    21.         case WM_PAINT:
    22.             if (DrawTimer != 0) {
    23.                 hDC = BeginPaint( EngineData.pl.hDllWnd,
    24.                                   &ps );
    25.  
    26.                 StretchBlt( hDC,
    27.                             0,
    28.                             0,
    29.                             EngineData.pl.WndCx,
    30.                             EngineData.pl.WndCy,
    31.                             hBackDC,
    32.                             GrPartX,
    33.                             GrPartY,
    34.                             GrPartW,
    35.                             GrPartH,
    36.                             SRCCOPY );
    37.  
    38.                 EndPaint( EngineData.pl.hDllWnd,
    39.                           &ps );
    40.  
    41.                 return FALSE;
    42.             }
    43.             break;
    44.  
    45.         case WM_ERASEBKGND:
    46.             return TRUE;
    wtf?!
     
  5. sometime

    sometime Odessa

    Публикаций:
    0
    Регистрация:
    22 апр 2009
    Сообщения:
    227
    Адрес:
    sunday
    карочь решил не париться)
    перехваливаем BitBlt и забываем обо всех напрягах))

    теперь вопрос - что такое DC - как понимаю это какого-то рода объект в ядре. Вопрос - почему имея hDC одного процесса я не могу в другом сделать BitBlt, выдает ошибку, только ГетЛастЕррор возвращает 0. Собственно кинул глазом на BitBlt, там ничего особенного в юзер моде не происходит. А вот с ядрышком пока туговато....

    *вообщем задача решена уже, но интересно стало пока "игрался")