共用方式為


TVN_ASYNCDRAW通知程式碼

當圖示或重迭的繪圖失敗時,樹狀檢視控制項會傳送至其父系。 此通知代碼會以 WM_NOTIFY 訊息的形式傳送。

TVN_ASYNCDRAW
        
    pnmTVAsynchDraw =  (NMTVASYNCDRAW *) lParam; 

參數

lParam

NMTVASYNCDRAW結構的指標。 NMTVASYNCDRAW結構包含繪製失敗的原因。

傳回值

沒有傳回值。

備註

樹狀檢視控制項必須具有 TVS_EX_DRAWIMAGEASYNC 擴充樣式。 請注意,這相當於清單檢視的LVN_ASYNCDRAWN旗標及其對應的樣式。

此控制項不會以非同步方式繪製。 非同步用於樹狀檢視控制項在無法使用時不會同步擷取影像的內容。 (例如,如果樹狀檢視控制項使用疏鬆影像清單,則影像可能無法使用,因為影像可能會卸載。) 當影像無法使用時,控制項會同步要求父代傳送具有 NMTVASYNCDRAW 結構的TVN_ASYNCDRAW通知,讓父系採取哪些動作。 這個結構的 hr 成員描述控制項繪製失敗的原因。 E_PENDING的 hr 結果表示影像完全不存在 (影像需要擷取) 。 成功表示影像存在,但不符合所需的影像品質。

父代會設定 結構的 dwRetFlags 成員,以通知控制項如何繼續進行。 例如,父代可能會傳回另一個影像,也就是 iRetImageIndex 成員中要繪製的控制項。 在此情況下,父系會將 dwRetFlags 成員設定為 ADRF_DRAWIMAGE。 如果控制項發現傳回的影像尚未擷取,控制項可能會傳送另一個TVN_ASYNCDRAW通知。

如果影像無法使用,非同步背後的概念是允許父系在背景進行擷取,如此一來,擷取就不會封鎖 UI 執行緒,也就是控制項所在的執行緒。 父代可能會傳回控制項ADRF_DRAWNOTHING,然後啟動背景執行緒以擷取圖示。 擷取之後,父系可以使用宏 TreeView_SetItem在樹狀檢視控制項中設定圖示。 這會導致樹狀檢視使專案失效,最後在影像清單中重新繪製擷取的影像。

下列程式碼範例可用來做為較大程式的一部分,示範父系如何透過控制項處理此通知中的兩個可能傳回碼,並決定控制項應該採取的動作。 未顯示 設定 dwRetFlags

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
   }

規格需求

需求
最低支援的用戶端
Windows Vista [僅限傳統型應用程式]
最低支援的伺服器
Windows Server 2008 [僅限傳統型應用程式]
標頭
Commctrl.h