2016-04-11 2 views
2

J'ai une fenêtre, qui reflète une autre fenêtre avec des miniatures DWM. Maintenant, je veux quand l'utilisateur redimensionne la fenêtre d'aperçu, que la zone d'aperçu est redimensionnée. Comment puis-je faire ceci? Comment est-ce que je peux envoyer la mise à jour au sujet de la nouvelle taille de l'aperçu (changez la taille 300x300 à la taille de la fenêtre d'aperçu)?Miniature DWM, modification de la taille de la fenêtre d'aperçu

switch (message) { 
case WM_CREATE: 
    { 
     HRESULT hr = S_OK; 
     HTHUMBNAIL thumbnail = NULL; 
     hr = DwmRegisterThumbnail(hWnd, ieWindowHwnd, &thumbnail); 
     if (SUCCEEDED(hr)) { 
      // The destination rectangle size 
      RECT dest = {0,0,300,300}; 

      // Set the thumbnail properties for use 
      DWM_THUMBNAIL_PROPERTIES dskThumbProps; 
      dskThumbProps.dwFlags = DWM_TNP_RECTDESTINATION | DWM_TNP_VISIBLE | DWM_TNP_SOURCECLIENTAREAONLY; 

      // Use the window frame and client area 
      dskThumbProps.fSourceClientAreaOnly = FALSE; 
      dskThumbProps.fVisible = TRUE; 
      dskThumbProps.rcDestination = dest; 

      // Display the thumbnail 
      hr = DwmUpdateThumbnailProperties(thumbnail, &dskThumbProps); 
     } 
    } 
    break; 
case WM_SIZE: 
    { 
     // What to do here. 
    } 
    break; 

Répondre

1

Supprimer thumbnail déclaration de WM_CREATE, déclarer la valeur statique dans la procédure de fenêtre. Puis mettez à jour le thumbnail dans WM_SIZE.

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wp, LPARAM lp) 
{ 
    static HTHUMBNAIL thumbnail = NULL; 

    switch (message) 
    { 
    ...  
    case WM_SIZE: 
    { 
     if (thumbnail) 
     { 
      RECT rc; 
      GetClientRect(hWnd, &rc); 
      DWM_THUMBNAIL_PROPERTIES dskThumbProps; 
      ... 
      dskThumbProps.rcDestination = rc; 
      DwmUpdateThumbnailProperties(thumbnail, &dskThumbProps); 
     } 
     break; 
    } 
} 

Appel DwmUnregisterThumbnail lorsque vous avez terminé.