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 [僅限傳統型應用程式] |
標頭 |
|