TVN_ASYNCDRAW通知代码
当图标或覆盖的绘制失败时,由树视图控件发送到其父级。 此通知代码以 WM_NOTIFY 消息的形式发送。
TVN_ASYNCDRAW
pnmTVAsynchDraw = (NMTVASYNCDRAW *) lParam;
参数
-
lParam
-
指向 NMTVASYNCDRAW 结构的指针。 NMTVASYNCDRAW 结构包含绘制失败的原因。
返回值
没有返回值。
备注
树视图控件必须具有 TVS_EX_DRAWIMAGEASYNC 扩展样式。 请注意,这等效于列表视图的LVN_ASYNCDRAWN标志及其相应的样式。
此控件不会异步绘制。 异步用于树视图控件不同步提取图像(如果图像不可用)的上下文中。 (例如,如果树视图控件使用稀疏图像列表,则映像可能不可用,因为映像可能被卸载。) 相反,当图像不可用时,控件会通过向父级发送具有 NMTVASYNCDRAW 结构的TVN_ASYNCDRAW通知来同步询问父级要采取什么操作。 此结构的 hr 成员描述控件的绘制失败的原因。 E_PENDING的 小时 结果意味着 (图像根本不存在,需要) 提取图像。 成功表示图像存在,但未以所需的图像质量显示。
父级设置结构的 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 [仅限桌面应用] |
标头 |
|