Udostępnij przez


Przegląd miniatur DWM

Program Desktop Window Manager (DWM) umożliwia wyświetlanie miniatur reprezentacji okien aplikacji. Nie są to statyczne migawki okna, ale zamiast tego dynamiczne, stałe połączenia między oknem źródła miniatury a lokalizacją w oknie docelowym, które odbiera renderowanie miniatur na żywo. Dzięki temu można szybko wyświetlać uruchomione aplikacje, umieszczając kursor na aplikacji na pasku zadań lub używając gestu ALT-TAB, aby zobaczyć i szybko przełączyć się do aplikacji.

Na poniższej ilustracji przedstawiono miniaturę na żywo systemu Windows Vista widoczną po umieszczeniu wskaźnika myszy na aplikacji na pasku zadań.

Zrzut ekranu przedstawiający miniaturę D W M widoczną po najechaniu kursorem na aplikację na pasku zadań.

Na poniższej ilustracji przedstawiono przełączanie Windows Vista (ALT-TAB) włączone przez DWM.

zrzut ekranu przedstawiający przełącznik alt-tab z włączoną funkcją dwm

Notatka

Miniatury DWM nie umożliwiają deweloperom tworzenia aplikacji, takich jak funkcja Flip3D systemu Windows Vista (WINKEY-TAB). Miniatury są renderowane bezpośrednio w oknie docelowym w 2-D.

 

Relacje miniatur DWM

Aby wyświetlić miniatury w aplikacji, należy najpierw ustanowić relację między oknem źródłowym a oknem docelowym. Odbywa się to przez wywołanie funkcji DwmRegisterThumbnail.

DwmRegisterThumbnail nie renderuje miniatury w oknie docelowym, ale jedynie nawiązuje relację i zapewnia uchwyt miniatury. Miniatura jest renderowana po ustawieniu DWM_THUMBNAIL_PROPERTIES oraz wywołaniu funkcji DwmUpdateThumbnailProperties. Kolejne wywołania DwmUpdateThumbnailProperties aktualizują miniaturę, używając nowego zestawu właściwości. DwM udostępnia również funkcję pomocnika DwmQueryThumbnailSourceSize w celu uzyskania rozmiaru okna źródłowego z miniatury.

Aby zakończyć relację miniatury, wywołaj funkcję DwmUnregisterThumbnail.

W poniższym przykładzie pokazano, jak utworzyć relację z pulpitem systemu Windows i wyświetlić ją w aplikacji.

HRESULT hr = S_OK;
HTHUMBNAIL thumbnail = NULL;

// Register the thumbnail
hr = DwmRegisterThumbnail(hwnd, FindWindow(_T("Progman"), NULL), &thumbnail);
if (SUCCEEDED(hr))
{
    // Specify the destination rectangle size
    RECT dest = {0,50,100,150};

    // Set the thumbnail properties for use
    DWM_THUMBNAIL_PROPERTIES dskThumbProps;
    dskThumbProps.dwFlags = DWM_TNP_SOURCECLIENTAREAONLY | DWM_TNP_VISIBLE | DWM_TNP_OPACITY | DWM_TNP_RECTDESTINATION;
    dskThumbProps.fSourceClientAreaOnly = FALSE; 
    dskThumbProps.fVisible = TRUE;
    dskThumbProps.opacity = (255 * 70)/100;
    dskThumbProps.rcDestination = dest;

    // Display the thumbnail
    hr = DwmUpdateThumbnailProperties(thumbnail,&dskThumbProps);
    if (SUCCEEDED(hr))
    {
        // ...
    }
}
return hr;

Przegląd Menedżera Okien Pulpitu

włączanie i kontrolowanie kompozycji DWM

zagadnienia dotyczące wydajności i najlepsze rozwiązania