2010-01-27 3 views
1

Я пытаюсь захватить экран дочернего окна и сделать его на материнской поверхности в Windows 7.Зачем DwmRegisterThumbnail терпеть неудачу?

HTHUMBNAIL thumbnail = NULL; 
HRESULT hr = S_OK; 
hr = DwmRegisterThumbnail(hWnd, visualHwnd, &thumbnail); 

if(SUCCEEDED(hr)) 
{ 
    ... 
} 

Это не может все время. visualHwnd - это дочернее окно, а hWnd - родительский. Я также пробовал это без отношений родитель-потомок, и он просто ничего не рисует, хорошо ожидаемый, потому что если утверждение не выполняется.

В чем может быть причина?

Вот как я создаю родителя:

hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | WS_CLIPSIBLINGS, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); 

и ребенок:

CreateProcessA(NULL, "PVFOX.exe \"view3.pv\" ", NULL, NULL, FALSE, CREATE_NO_WINDOW, NULL, NULL, &si, &piVisual); 
WaitForInputIdle(piVisual.hProcess, INFINITE); 
Sleep(3000); 

EnumWindows(EnumWindowsProc, 0); 
SetParent(visualHwnd, hWnd); 
+0

Что такое код ошибки? – Michael

ответ

2

Из MSDN:

  • hwndDestination

    Дескриптор окна которые будут использовать миниатюра DWM. Установка дескриптора окна назначения на что-либо, кроме типа окна верхнего уровня, приведет к E_INVALIDARG.

  • HwndSource

    Ручка к окну, чтобы в качестве источника миниатюр. Установка дескриптора исходного кода на что-либо, кроме типа окна верхнего уровня, приведет к E_INVALIDARG.

Ожидается, что это произойдет, если вы передадите дочернее окно.

+0

Man this Win API просто продолжает становиться все более неудобным. Вы знаете способ захвата части дочернего окна, в котором работает OpenGL, с OpenGL? (Это нормально получается) Я также задал вопрос здесь: http://stackoverflow.com/questions/2143854/getting-screenshot-of-a-child-window-running-opengl-in-it-windows –

+0

Нет, не знаю. Не оконно ли OpenGL отключить DWM в любом случае (обратно к ОС Windows Basic)? В этом случае DwmRegisterThumbnail будет терпеть неудачу в любом случае. Если OpenGL отключает DWM, это означает, что он обходит традиционный стек GDI и визуализирует его непосредственно на экране, что означает, что Wndows не знает о содержимом окна и поэтому не может его захватить. – Michael

+0

Это окно рисует opengl только на части своего окна, вроде программного обеспечения для 3D-моделирования, с графическим интерфейсом. Нет, это не отключает DWM. –

Смежные вопросы