Device Context
От: sw  
Дата: 06.01.10 21:59
Оценка:
Можно ли выдрать невидимые (например, перекрытые) участки отрисовываемого окна или заставить его отрисовываться (или делать полную копию) в нужный мне DC?
Re: Device Context
От: kero Россия  
Дата: 06.01.10 22:17
Оценка:
Здравствуйте, sw, Вы писали:

sw>Можно ли выдрать невидимые (например, перекрытые) участки отрисовываемого окна или заставить его отрисовываться (или делать полную копию) в нужный мне DC?


Можно.
По всему, пашиным хозяевам позарез нужна война в Европе
(уверены — к ним не залетит, в предыдущих двух не залетало жеж)
Автор: kero
Дата: 21.07.14
Re[2]: Device Context
От: sw  
Дата: 06.01.10 23:11
Оценка:
K>Можно.
А каким образом? Прикрутить DC к другому процессу вроде бы нельзя. Подменять HDC бессмысленно... ?
Re[3]: Device Context
От: kero Россия  
Дата: 06.01.10 23:24
Оценка:
Здравствуйте, sw, Вы писали:

K>>Можно.

sw> А каким образом? Прикрутить DC к другому процессу вроде бы нельзя. Подменять HDC бессмысленно... ?

Употребите местный Поиск, на рсдн полно было топиков на эту тему.

Там и прочитаете про:
WM_PRINT (для совсем уж невидимых окон) с неизбежной отсылкой к Фень Юаню,
PrintWindow,
WS_EX_LAYERED+SetLayeredWindowAttributes,
WS_EX_COMPOSITED,
...
По всему, пашиным хозяевам позарез нужна война в Европе
(уверены — к ним не залетит, в предыдущих двух не залетало жеж)
Автор: kero
Дата: 21.07.14
Re[4]: Device Context
От: Аноним  
Дата: 08.01.10 22:48
Оценка:
Спасибо большое, всё прекрасно работает. Выдёргивает с другого desktop'а полностью со всеми СHILDами, но есть один нюанс: при установке окну WS_EX_COMPOSITED, эффект работает только после сворачивания/разворачивания его вручную. Программный вариант CloseWindow+RedrawWindow+ShowWindow+RedrawWindow не прокатывает... Такая ерунда только на другом desktop'е. На локальном всё ок.
Re[5]: Device Context
От: kero Россия  
Дата: 09.01.10 14:34
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Спасибо большое, всё прекрасно работает. Выдёргивает с другого desktop'а полностью со всеми СHILDами, но есть один нюанс: при установке окну WS_EX_COMPOSITED, эффект работает только после сворачивания/разворачивания его вручную. Программный вариант CloseWindow+RedrawWindow+ShowWindow+RedrawWindow не прокатывает... Такая ерунда только на другом desktop'е. На локальном всё ок.


А не покажете здесь этот ваш код — с другого desktop'а, с нюансом ?
По всему, пашиным хозяевам позарез нужна война в Европе
(уверены — к ним не залетит, в предыдущих двух не залетало жеж)
Автор: kero
Дата: 21.07.14
Re[6]: Device Context
От: sw  
Дата: 09.01.10 20:44
Оценка:
Здравствуйте, kero, Вы писали:

K>А не покажете здесь этот ваш код — с другого desktop'а, с нюансом ?


    HDESK d=CreateDesktop(dt_name,0,0,0,GENERIC_ALL,0);
...
    STARTUPINFO startinfo;
    startinfo.lpDesktop=dt_name;
    startinfo.cb=sizeof(STARTUPINFO);
    startinfo.dwFlags=0;
    startinfo.lpReserved=0;
    startinfo.lpReserved2=0;
    startinfo.cbReserved2=0;
    startinfo.lpTitle=0;
    PROCESS_INFORMATION processinfo;
    CreateProcess(0,proc_cmd,0,0,0,0,0,0,&startinfo,&processinfo);
...
    HDC tmp=CreateCompatibleDC(0);
    RECT r;::GetWindowRect(hwnd,&r);
    HDC src=::GetDC(hwnd);
    long style=::GetWindowLong(hwnd,GWL_EXSTYLE);
    ::CloseWindow(hwnd);
    ::RedrawWindow(hwnd,&r,0,RDW_FRAME|RDW_ERASE|RDW_INVALIDATE|RDW_ERASENOW|RDW_UPDATENOW|RDW_ALLCHILDREN);
    ::UpdateWindow(hwnd);
    ::ShowWindow(hwnd,1);
    ::SetWindowLong(hwnd,GWL_EXSTYLE,style|WS_EX_COMPOSITED);
    ::RedrawWindow(hwnd,&r,0,RDW_FRAME|RDW_ERASE|RDW_INVALIDATE|RDW_ERASENOW|RDW_UPDATENOW|RDW_ALLCHILDREN);
    ::UpdateWindow(hwnd);
//    ::SendMessage(hwnd, WM_SYSCOMMAND, SC_MAXIMIZE, 0);
    
    ::PrintWindow(hwnd,dst,0);


Изголялся по-всякому с вариантами перерисовки окна. Очевидно, я чего-то не понимаю... Но ведь на активном работает.
Хорошо работает выдирание каждого child-окна, но к сожалению, в нужной мне проге есть хитрые тулбары, которые пока не выдираются и поганят результат.
Re[7]: Device Context
От: kero Россия  
Дата: 09.01.10 21:10
Оценка:
Здравствуйте, sw, Вы писали:
sw>[code ]
...
sw>[/code ]

А что, SetWindowPos(hwnd,0,0,0,0,0,SWP_NOZORDER|SWP_NOMOVE|SWP_NOSIZE|SWP_FRAMECHANGED) — тоже не сработало?
По всему, пашиным хозяевам позарез нужна война в Европе
(уверены — к ним не залетит, в предыдущих двух не залетало жеж)
Автор: kero
Дата: 21.07.14
Re[8]: Device Context
От: sw  
Дата: 11.01.10 16:46
Оценка:
Здравствуйте, kero, Вы писали:
K>А что, SetWindowPos(...) — тоже не сработало?

К сожалению, нет. Вышел по-другому. Долго и неэффективно, зато работает — перебором всех дочерних окон и выдиранием каждого через PrintWindow. Теперь формируется как надо. Спасибо за помощь.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.