Почему DwmRegisterThumbnail терпит неудачу? - PullRequest
1 голос
/ 27 января 2010

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

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);

1 Ответ

2 голосов
/ 27 января 2010

Из MSDN:

  • hwndDestination

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

  • HwndSource

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

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

...