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 [데스크톱 앱만 해당] |
헤더 |
|