TVN_ASYNCDRAW Benachrichtigungscode

Wird von einem Strukturansichtssteuerelement an das übergeordnete Steuerelement gesendet, wenn bei der Zeichnung eines Symbols oder einer Überlagerung ein Fehler aufgetreten ist. Dieser Benachrichtigungscode wird in Form einer WM_NOTIFY Nachricht gesendet.

TVN_ASYNCDRAW
        
    pnmTVAsynchDraw =  (NMTVASYNCDRAW *) lParam; 

Parameter

lParam

Zeiger auf eine NMTVASYNCDRAW-Struktur . Die NMTVASYNCDRAW-Struktur enthält den Grund, warum das Zeichnen fehlgeschlagen ist.

Rückgabewert

Kein Rückgabewert.

Bemerkungen

Das Strukturansichtssteuerelement muss die TVS_EX_DRAWIMAGEASYNC erweiterten Format aufweisen. Beachten Sie, dass dies dem LVN_ASYNCDRAWN Flag und der entsprechenden Formatvorlage der Listenansicht entspricht.

Dieses Steuerelement zeichnet nicht asynchron. Asynchron wird in dem Kontext verwendet, in dem das Strukturansichtssteuerelement ein Bild nicht synchron extrahiert, wenn es nicht verfügbar ist. (Für instance ist das Bild möglicherweise nicht verfügbar, wenn das Strukturansichtssteuerelement eine Sparse-Bildliste verwendet, da das Bild möglicherweise entladen wird.) Wenn ein Bild nicht verfügbar ist, fragt das Steuerelement stattdessen synchron das übergeordnete Element, welche Aktion ausgeführt werden soll, indem es dem übergeordneten Element eine TVN_ASYNCDRAW Benachrichtigung mit einer NMTVASYNCDRAW-Struktur sendet. Das hr-Element dieser Struktur beschreibt den Grund, warum das Zeichnen des Steuerelements fehlgeschlagen ist. Ein hr-Ergebnis von E_PENDING bedeutet, dass das Bild überhaupt nicht vorhanden ist (das Bild muss extrahiert werden). Der Erfolg gibt an, dass das Bild vorhanden ist, aber nicht in der erforderlichen Bildqualität.

Das übergeordnete Element legt den dwRetFlags-Member der -Struktur fest, um das Steuerelement über die Vorgehensweise zu informieren. Für instance kann das übergeordnete Element ein anderes Bild im Element iRetImageIndex zurückgeben, damit das Steuerelement gezeichnet werden soll. In diesem Fall legt das übergeordnete Element den dwRetFlags-Member auf ADRF_DRAWIMAGE fest. Wenn das Steuerelement feststellt, dass das zurückgegebene Bild nicht extrahiert wurde, wird möglicherweise eine weitere TVN_ASYNCDRAW Benachrichtigung vom Steuerelement gesendet.

Wenn ein Bild nicht verfügbar ist, besteht die Idee hinter asynchron darin, das übergeordnete Element die Extraktion im Hintergrund zuzulassen, damit die Extraktion nicht den UI-Thread blockiert, d. h. den Thread, auf dem sich das Steuerelement befindet. Das übergeordnete Element kann ADRF_DRAWNOTHING an das Steuerelement zurückgeben und dann einen Hintergrundthread starten, um das Symbol zu extrahieren. Nach der Extraktion kann das übergeordnete Element das Symbol im Treeview-Steuerelement mit makro-TreeView_SetItem festlegen. Dies führt dazu, dass die Strukturansicht das Element ungültig macht und es schließlich mit dem extrahierten Bild in der Bildliste neu streicht.

Das folgende Codebeispiel, das als Teil eines größeren Programms verwendet werden soll, zeigt, wie ein übergeordnetes Element zwei mögliche Rückgabecodes in dieser Benachrichtigung durch ein -Steuerelement verarbeiten und entscheiden kann, welche Aktion das Steuerelement ausführen soll. Das Festlegen von dwRetFlags wird nicht angezeigt.

case TVN_ASYNCDRAW:

   NMTVASYNCDRAW *pnm =  (NMTVASYNCDRAW *)lParam
   short dwDrawSuccessFlags = ShortFromResult(pnm->hr);

   if (dwDrawSuccessFlags & ILDRF_IMAGELOWQUALITY)
   {
        // Need to re-extract the icon
   }

   if (dwDrawSuccessFlags & ILDRF_OVERLAYLOWQUALITY)
   {
        // Need to re-extract the overlay
   }

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client)
Windows Vista [nur Desktop-Apps]
Unterstützte Mindestversion (Server)
Windows Server 2008 [nur Desktop-Apps]
Header
Commctrl.h