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を使用して treeview コントロールのアイコンを設定できます。 これにより、ツリー ビューによって項目が無効になり、最終的にイメージ リスト内の抽出されたイメージで再描画されます。
次のコード例は、より大きなプログラムの一部として使用するために、親がコントロールによってこの通知で 2 つの可能なリターン コードを処理する方法と、コントロールが実行する必要があるアクションを決定する方法を示しています。 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 [デスクトップ アプリのみ] |
ヘッダー |
|