Поделиться через


код уведомления TVN_ASYNCDRAW

Отправляется элементом управления в виде дерева в родительский объект при сбое рисования значка или наложения. Этот код уведомления отправляется в виде сообщения WM_NOTIFY .

TVN_ASYNCDRAW
        
    pnmTVAsynchDraw =  (NMTVASYNCDRAW *) lParam; 

Параметры

lParam

Указатель на структуру NMTVASYNCDRAW . Структура NMTVASYNCDRAW содержит причину сбоя при отрисовке.

Возвращаемое значение

Нет возвращаемого значения.

Комментарии

Элемент управления представлением в виде дерева должен иметь TVS_EX_DRAWIMAGEASYNC расширенный стиль. Обратите внимание, что это эквивалентно флагу LVN_ASYNCDRAWN представления списка и соответствующему стилю.

Этот элемент управления не рисует асинхронно. Асинхронный используется в контексте, когда элемент управления представлением в виде дерева не извлекает изображение синхронно, если оно недоступно. (Например, образ может быть недоступен, если элемент управления представлением в виде дерева использует разреженный список изображений, так как изображение может быть выгружено.) Вместо этого, когда изображение недоступно, элемент управления синхронно запрашивает у родительского элемента действие, отправляя родительскому элементу уведомление TVN_ASYNCDRAW со структурой NMTVASYNCDRAW . Элемент hr этой структуры описывает причину сбоя при отрисовке элемента управления. Результат E_PENDING означает, что изображение отсутствует вообще (изображение необходимо извлечь). Успешное выполнение означает, что изображение присутствует, но не имеет требуемого качества.

Родительский элемент задает элемент dwRetFlags структуры, чтобы сообщить элементу управления, как продолжить. Например, родительский элемент может вернуть другое изображение в элементе iRetImageIndex для рисования элемента управления. В этом случае родительский элемент dwRetFlags задает ADRF_DRAWIMAGE. Если элемент управления обнаруживает, что возвращенное изображение не было извлечено, элемент управления может отправить еще одно уведомление TVN_ASYNCDRAW.

Если изображение недоступно, асинхронная идея заключается в том, чтобы разрешить родительскому элементу выполнять извлечение в фоновом режиме, чтобы извлечение не блокировать поток пользовательского интерфейса, т. е. поток, в который включен элемент управления. Родительский элемент может вернуть ADRF_DRAWNOTHING элементу управления, а затем запустить фоновый поток для извлечения значка. После извлечения родительский элемент может задать значок в элементе управления treeview с помощью макросов 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