Acerca de los controles de Tree-View

Un control de vista de árbol es una ventana que muestra una lista jerárquica de elementos, como los encabezados de un documento, las entradas de un índice o los archivos y directorios de un disco. Cada elemento consta de una etiqueta y una imagen de mapa de bits opcional, y cada elemento puede tener una lista de subelementos asociados. Al hacer clic en un elemento, el usuario puede expandir o contraer la lista asociada de subelementos.

En la ilustración siguiente se muestra un control de vista de árbol simple con un nodo raíz, un nodo expandido y un nodo contraído. El control usa un mapa de bits para el elemento seleccionado y otro mapa de bits para otros elementos.

captura de pantalla que muestra cinco nodos en una jerarquía; se selecciona el texto de un nodo, pero los nodos no están vinculados entre sí por líneas.

Después de crear un control de vista de árbol, agregue, quite, organice o manipule elementos mediante el envío de mensajes al control. Cada mensaje tiene una o varias macros correspondientes que puede usar en lugar de enviar el mensaje explícitamente.

En esta sección se describen los temas siguientes.

estilos de Tree-View

Los estilos de vista de árbol rigen los aspectos de la apariencia de un control de vista de árbol. Los estilos iniciales se establecen al crear el control de vista de árbol. Puede recuperar y cambiar los estilos después de crear el control de vista de árbol mediante las funciones GetWindowLong y SetWindowLong .

El estilo TVS_HASLINES mejora la representación gráfica de la jerarquía de un control de vista de árbol dibujando líneas que vinculan elementos secundarios a su elemento primario, como se muestra en la ilustración siguiente.

captura de pantalla que muestra la disposición anterior, pero con líneas que unen los nodos; la primera línea desciende del nodo raíz.

Por sí mismo, este estilo no dibuja líneas en la raíz de la jerarquía. Para ello, debe combinar los estilos TVS_HASLINES y TVS_LINESATROOT . El resultado se muestra en la ilustración siguiente.

captura de pantalla que muestra la disposición anterior, pero con una línea horizontal adicional que conduce al nodo raíz

El usuario puede expandir o contraer la lista de elementos secundarios de un elemento primario haciendo doble clic en el elemento primario. Un control de vista de árbol que tiene el estilo TVS_HASBUTTONS agrega un botón al lado izquierdo de cada elemento primario. El usuario puede hacer clic en el botón una vez en lugar de hacer doble clic en el elemento primario para expandir o contraer el elemento secundario. TVS_HASBUTTONS no agrega botones a los elementos en la raíz de la jerarquía. Para ello, debe combinar TVS_HASLINES, TVS_LINESATROOT y TVS_HASBUTTONS. Esta combinación de estilos se muestra en la ilustración siguiente.

captura de pantalla que muestra la disposición anterior, pero con botones de expandir o contraer en cada vértice de dos líneas

El estilo TVS_CHECKBOXES crea casillas junto a cada elemento. Si desea usar el estilo de casilla, debe establecer el estilo de TVS_CHECKBOXES (con SetWindowLong) después de crear el control de vista de árbol y antes de rellenar el árbol. De lo contrario, es posible que las casillas aparezcan desactivadas, en función de los problemas de tiempo. En la ilustración siguiente se muestra el estilo de casilla.

captura de pantalla que muestra la disposición anterior, pero con una casilla junto a cada nodo; se seleccionan dos de las casillas.

El estilo TVS_FULLROWSELECT hace que el resaltado de selección se extienda sobre el ancho completo del control, no solo sobre el propio elemento. En la ilustración siguiente se muestra este estilo.

captura de pantalla que muestra la disposición original de cinco nodos sin líneas, pero el resaltado de selección amplía el ancho completo del control.

El estilo TVS_EDITLABELS permite al usuario editar las etiquetas de los elementos de vista de árbol. Para obtener más información sobre la edición de etiquetas, vea Edición de etiquetas de vista de árbol.

Para obtener más información sobre estos y otros estilos, vea Estilos de ventana de control de vista de árbol.

Elementos primarios y secundarios

Cualquier elemento de un control de vista de árbol puede tener una lista de subelementos ( denominados elementos secundarios) asociados. Un elemento que tiene uno o varios elementos secundarios se denomina elemento primario. Un elemento secundario se muestra debajo de su elemento primario y tiene sangría para indicar que está subordinado al elemento primario. Un elemento que no tiene ningún elemento primario aparece en la parte superior de la jerarquía y se denomina elemento raíz.

Para agregar un elemento a un control de vista de árbol, envíe el mensaje TVM_INSERTITEM al control. El mensaje devuelve un identificador al tipo HTREEITEM, que identifica de forma única el elemento. Al agregar un elemento, debe especificar el identificador para el elemento primario del nuevo elemento. Si especifica NULL o el valor TVI_ROOT en lugar de un identificador de elemento primario en la estructura TVINSERTSTRUCT , el elemento se agrega como un elemento raíz.

En cualquier momento dado, el estado de la lista de elementos secundarios de un elemento primario se puede expandir o contraer. Cuando se expande el estado, los elementos secundarios se muestran debajo del elemento primario. Cuando se contrae, no se muestran los elementos secundarios. La lista alterna automáticamente entre los estados expandidos y contraídos cuando el usuario hace doble clic en el elemento primario o, si el elemento primario tiene el estilo TVS_HASBUTTONS , cuando el usuario hace clic en el botón asociado al elemento primario. Una aplicación puede expandir o contraer los elementos secundarios mediante el mensaje TVM_EXPAND .

Un control de vista de árbol envía a la ventana primaria un mensaje de notificación de TVN_ITEMEXPANDING cuando la lista de elementos secundarios de un elemento primario está a punto de expandirse o contraerse. La notificación ofrece a una aplicación la oportunidad de evitar el cambio o establecer cualquier atributo del elemento primario que dependa del estado de la lista de elementos secundarios. Después de cambiar el estado de la lista, el control de vista de árbol envía a la ventana primaria un mensaje de notificación TVN_ITEMEXPANDED .

Cuando se expande una lista de elementos secundarios, se le aplicará sangría en relación con el elemento primario. Puede establecer la cantidad de sangría mediante el mensaje TVM_SETINDENT o recuperar la cantidad actual mediante el mensaje TVM_GETINDENT .

Un control de vista de árbol usa memoria asignada desde el montón del proceso que crea el control de vista de árbol. El número máximo de elementos de una vista de árbol se basa en la cantidad de memoria disponible en el montón.

Etiquetas de elementos

Normalmente, se especifica el texto de la etiqueta de un elemento al agregar el elemento al control de vista de árbol. El mensaje TVM_INSERTITEM incluye una estructura TVITEM que define las propiedades del elemento, incluida una cadena que contiene el texto de la etiqueta.

Un control de vista de árbol asigna memoria para almacenar cada elemento; el texto de las etiquetas de elemento ocupa una parte significativa de esta memoria. Si la aplicación mantiene una copia de las cadenas en el control de vista de árbol, puede reducir los requisitos de memoria del control especificando el valor de LPSTR_TEXTCALLBACK en el miembro pszText de TVITEM en lugar de pasar cadenas reales a la vista de árbol. El uso de LPSTR_TEXTCALLBACK hace que el control de vista de árbol recupere el texto de la etiqueta de un elemento de la ventana primaria siempre que sea necesario volver a dibujar el elemento. Para recuperar el texto, el control de vista de árbol envía un mensaje de notificación TVN_GETDISPINFO , que incluye la dirección de una estructura NMTVDISPINFO . La ventana primaria debe rellenar los miembros adecuados de la estructura incluida.

edición de etiquetas de Tree-View

El usuario puede editar directamente las etiquetas de los elementos de un control de vista de árbol que tenga el estilo TVS_EDITLABELS . El usuario comienza a editar al hacer clic en la etiqueta del elemento que tiene el foco. Una aplicación comienza a editarse con el mensaje TVM_EDITLABEL . El control de vista de árbol notifica a la ventana primaria cuando se inicia la edición y cuando se cancela o se completa. Cuando se completa la edición, la ventana primaria es responsable de actualizar la etiqueta del elemento, si procede.

Cuando comienza la edición de etiquetas, un control de vista de árbol envía a su ventana primaria un mensaje de notificación de TVN_BEGINLABELEDIT . Al procesar esta notificación, una aplicación puede permitir la edición de algunas etiquetas y evitar la edición de otras. Devolver cero permite la edición y devolver un valor distinto de cero lo impide.

Cuando se cancela o completa la edición de etiquetas, un control de vista de árbol envía a su ventana primaria un mensaje de notificación TVN_ENDLABELEDIT . El parámetro lParam es la dirección de una estructura NMTVDISPINFO . El parámetro item es una estructura TVITEM que identifica el elemento e incluye el texto editado. La ventana primaria es responsable de actualizar la etiqueta del elemento si desea mantener la nueva etiqueta. El miembro pszText de TVITEM es cero si se cancela la edición.

Durante la edición de etiquetas, normalmente en respuesta al mensaje de notificación de TVN_BEGINLABELEDIT , puede recuperar el identificador del control de edición usado para la edición de etiquetas mediante el mensaje TVM_GETEDITCONTROL . Puede enviar al control de edición un mensaje de EM_SETLIMITTEXT para limitar la cantidad de texto que un usuario puede escribir o subclasar el control de edición para interceptar y descartar caracteres no válidos. Sin embargo, tenga en cuenta que el control de edición solo se muestra después de enviar TVN_BEGINLABELEDIT.

posición del elemento de Tree-View

La posición inicial de un elemento se establece cuando el elemento se agrega al control de vista de árbol mediante el mensaje TVM_INSERTITEM . El mensaje incluye una estructura TVINSERTSTRUCT que especifica el identificador para el elemento primario y el identificador del elemento después del cual se va a insertar el nuevo elemento. El segundo identificador debe identificar un elemento secundario del elemento primario especificado o uno de estos valores: TVI_FIRST, TVI_LAST o TVI_SORT.

Cuando se especifica TVI_FIRST o TVI_LAST, el control de vista de árbol coloca el nuevo elemento al principio o al final de la lista de elementos secundarios del elemento primario especificado. Cuando se especifica TVI_SORT, el control de vista de árbol inserta el nuevo elemento en la lista de elementos secundarios en orden alfabético en función del texto de las etiquetas de elemento.

Puede colocar la lista de elementos secundarios de un elemento primario en orden alfabético mediante el mensaje TVM_SORTCHILDREN . El mensaje incluye un parámetro que especifica si todos los niveles de elementos secundarios descendentes del elemento primario especificado también se ordenan en orden alfabético.

El mensaje de TVM_SORTCHILDRENCB permite ordenar los elementos secundarios en función de los criterios que defina. Al usar este mensaje, se especifica una función de devolución de llamada definida por la aplicación a la que el control de vista de árbol puede llamar siempre que sea necesario decidir el orden relativo de dos elementos secundarios. La función de devolución de llamada recibe dos valores definidos por la aplicación de 32 bits para los elementos que se comparan y un tercer valor de 32 bits que se especifica al enviar TVM_SORTCHILDRENCB.

Información general sobre estados de elementos de Tree-View

Cada elemento de un control de vista de árbol tiene un estado actual. La información de estado de cada elemento incluye un conjunto de marcas de bits, así como índices de lista de imágenes que indican la imagen de estado y la imagen de superposición del elemento. Las marcas de bits indican si el elemento está seleccionado, deshabilitado, expandido, etc. En su mayor parte, un control de vista de árbol establece automáticamente el estado de un elemento para reflejar las acciones del usuario, como la selección de un elemento. Sin embargo, también puede establecer el estado de un elemento mediante el mensaje TVM_SETITEM y puede recuperar el estado actual de un elemento mediante el mensaje TVM_GETITEM . Para obtener una lista completa de los estados de los elementos, vea Estados de elementos de control de vista de árbol.

El estado actual de un elemento lo especifica el miembro de estado de la estructura TVITEM . Un control de vista de árbol puede cambiar el estado de un elemento para reflejar una acción del usuario, como seleccionar el elemento o establecer el foco en el elemento. Además, una aplicación podría cambiar el estado de un elemento para deshabilitar u ocultar el elemento o especificar una imagen de superposición o una imagen de estado.

Al especificar o cambiar el estado de un elemento, el miembro de máscara de estado de TVITEM especifica los bits de estado que se van a establecer y el miembro de estado contiene los nuevos valores para esos bits.

Para establecer la imagen de superposición de un elemento, la máscara de estado debe incluir el valor de TVIS_OVERLAYMASK y el estado debe incluir el índice basado en uno de la imagen de superposición desplazado a la izquierda 8 bits mediante la macro INDEXTOOVERLAYMASK . El índice puede ser cero para especificar ninguna imagen de superposición.

Se muestra una imagen de estado junto al icono de un elemento para indicar un estado definido por la aplicación. Las imágenes de estado se encuentran en una lista de imágenes de estado que se especifica mediante el envío de un mensaje de TVM_SETIMAGELIST . Para establecer la imagen de estado de un elemento, incluya el valor TVIS_STATEIMAGEMASK en el miembro de máscara de estado de la estructura TVITEM . Los bits de 12 a 15 del miembro de estado de la estructura especifican el índice en la lista de imágenes de estado de la imagen que se va a dibujar.

Para establecer el índice de imagen de estado, use INDEXTOSTATEIMAGEMASK. Esta macro toma un índice y establece los bits de 12 a 15 adecuadamente. Para indicar que el elemento no tiene ninguna imagen de estado, establezca el índice en cero. Esta convención significa que la imagen cero de la lista de imágenes de estado no se puede usar como imagen de estado. Para aislar los bits de 12 a 15 del miembro de estado , use la máscara de TVIS_STATEIMAGEMASK . Para obtener más información sobre la superposición y las imágenes de estado, vea Listas de imágenes de vista de árbol.

Selección de elementos

Un control de vista de árbol notifica a la ventana primaria cuando la selección cambia de un elemento a otro mediante el envío de los mensajes de notificación de TVN_SELCHANGING y TVN_SELCHANGED . Ambas notificaciones incluyen un valor que especifica si el cambio es el resultado de un clic del mouse o una pulsación de tecla. Las notificaciones también incluyen información sobre el elemento que obtiene la selección y el elemento que la pierde. Puede usar esta información para establecer atributos de elemento que dependen del estado de selección del elemento. Devolver TRUE en respuesta a TVN_SELCHANGING impide que la selección cambie y devolver FALSE permite el cambio.

Una aplicación puede cambiar la selección enviando el mensaje TVM_SELECTITEM .

Información del elemento

Los controles de vista de árbol admiten una serie de mensajes que recuperan información sobre los elementos del control.

El mensaje TVM_GETITEM puede recuperar el identificador y los atributos de un elemento. Los atributos de un elemento incluyen su estado actual, los índices de la lista de imágenes del control de las imágenes seleccionadas y no seleccionadas, una marca que indica si el elemento tiene elementos secundarios, la dirección de la cadena de etiqueta del elemento y el valor de 32 bits definido por la aplicación del elemento.

El TVM_GETNEXTITEM mensaje recupera el elemento de vista de árbol que lleva la relación especificada con el elemento actual. El mensaje puede recuperar el elemento primario de un elemento, el elemento visible siguiente o anterior, el primer elemento secundario, etc.

El TVM_GETITEMRECT mensaje recupera el rectángulo delimitador de un elemento de vista de árbol. Los mensajes TVM_GETCOUNT y TVM_GETVISIBLECOUNT recuperan un recuento de los elementos de un control de vista de árbol y un recuento de los elementos que pueden ser totalmente visibles en la ventana del control de vista de árbol, respectivamente. Puede asegurarse de que un elemento determinado esté visible mediante el TVM_ENSUREVISIBLE mensaje.

listas de imágenes de Tree-View

Cada elemento de un control de vista de árbol puede tener cuatro imágenes de mapa de bits asociadas.

  • Imagen, como una carpeta abierta, que se muestra cuando se selecciona el elemento.
  • Imagen, como una carpeta cerrada, que se muestra cuando el elemento no está seleccionado.
  • Una imagen de superposición que se dibuja de forma transparente sobre la imagen seleccionada o no seleccionada.
  • Imagen de estado, que es una imagen adicional que se muestra a la izquierda de la imagen seleccionada o no seleccionada. Puede usar imágenes de estado, como casillas activadas y desactivadas, para indicar los estados de elementos definidos por la aplicación.

De forma predeterminada, un control de vista de árbol no muestra imágenes de elementos. Para mostrar imágenes de elementos, debe crear listas de imágenes y asociarlas al control . Para obtener más información sobre las listas de imágenes, vea Listas de imágenes.

Un control de vista de árbol puede tener dos listas de imágenes: una lista de imágenes normal y una lista de imágenes de estado. Una lista de imágenes normal almacena las imágenes seleccionadas, no seleccionadas y superpuestas. Una lista de imágenes de estado almacena imágenes de estado. Use la función ImageList_Create para crear una lista de imágenes y use otras funciones de lista de imágenes para agregar mapas de bits a la lista de imágenes. A continuación, para asociar la lista de imágenes con el control de vista de árbol, use el mensaje TVM_SETIMAGELIST . El TVM_GETIMAGELIST mensaje recupera un identificador de una de las listas de imágenes de un control de vista de árbol. Este mensaje es útil si necesita agregar más imágenes a la lista.

Además de las imágenes seleccionadas y no seleccionadas, la lista de imágenes normales de un control de vista de árbol puede contener hasta cuatro imágenes superpuestas. Las imágenes de superposición se identifican mediante un índice basado en uno y están diseñadas para dibujarse de forma transparente sobre las imágenes seleccionadas y no seleccionadas. Para asignar un índice de máscara de superposición a una imagen de la lista de imágenes normales, llame a la función ImageList_SetOverlayImage .

De forma predeterminada, todos los elementos muestran la primera imagen en la lista de imágenes normal para los estados seleccionados y no seleccionados. Además, de forma predeterminada, los elementos no muestran imágenes de superposición ni imágenes de estado. Puede cambiar estos comportamientos predeterminados para un elemento enviando el mensaje TVM_INSERTITEM o TVM_SETITEM . Estos mensajes usan la estructura TVITEM para especificar índices de lista de imágenes para un elemento.

Para especificar las imágenes seleccionadas y no seleccionadas de un elemento, establezca los bits de TVIF_SELECTEDIMAGE y TVIF_IMAGE en el miembro mask de la estructura TVITEM y especifique índices de la lista de imágenes normales del control en los miembros iSelectImage e iImage . Como alternativa, puede especificar el valor de I_IMAGECALLBACK en iSelectImage e iImage en lugar de especificar índices. Esto hace que el control consulte su ventana primaria para un índice de lista de imágenes cada vez que el elemento está a punto de volver a dibujarse. El control envía el mensaje de notificación TVN_GETDISPINFO para recuperar el índice.

Para asociar una imagen de superposición a un elemento, use la macro INDEXTOOVERLAYMASK para especificar un índice de máscara de superposición en el miembro de estado de la estructura TVITEM del elemento. También debe establecer los bits de TVIS_OVERLAYMASK en el miembro stateMask . Los índices de máscara de superposición están basados en uno; un índice de cero indica que no se especificó ninguna imagen de superposición.

Las imágenes de estado se almacenan en una lista de imágenes de estado independiente e identificadas por su índice. Para especificar la lista de imágenes de estado, envíe un mensaje de TVM_SETIMAGELIST . A diferencia del control de vista de lista, que usa un índice basado en uno para identificar imágenes de estado, las imágenes de estado de control de árbol se identifican mediante un índice de base cero. Sin embargo, un índice de cero indica que el elemento no tiene una imagen de estado. Por lo tanto, la imagen cero no se puede usar como imagen de estado. Para obtener más información sobre los estados de elemento y las imágenes de estado, vea Información general sobre estados de elementos de vista de árbol.

Operaciones de arrastrar y colocar

Un control de vista de árbol notifica a la ventana primaria cuando el usuario empieza a arrastrar un elemento. La ventana primaria recibe un mensaje de notificación TVN_BEGINDRAG cuando el usuario comienza a arrastrar un elemento con el botón izquierdo del mouse y un mensaje de notificación de TVN_BEGINRDRAG cuando el usuario comienza a arrastrar con el botón derecho. Puede impedir que un control de vista de árbol envíe estas notificaciones proporcionando al control de vista de árbol el estilo TVS_DISABLEDRAGDROP .

Obtiene una imagen que se va a mostrar durante una operación de arrastre mediante el mensaje TVM_CREATEDRAGIMAGE . El control de vista de árbol crea un mapa de bits de arrastre basado en la etiqueta del elemento que se está arrastrando. A continuación, el control de vista de árbol crea una lista de imágenes, le agrega el mapa de bits y devuelve el identificador a la lista de imágenes.

Debe proporcionar el código que realmente arrastra el elemento. Normalmente, esto implica el uso de las funciones de arrastre de las funciones de lista de imágenes y el procesamiento de los mensajes de WM_MOUSEMOVE y WM_LBUTTONUP (o WM_RBUTTONUP) enviados a la ventana primaria después de que se haya iniciado la operación de arrastre.

Si los elementos de un control de vista de árbol deben ser los destinos de las operaciones de arrastrar y colocar, debe saber cuándo está el puntero del mouse en un elemento de destino. Para averiguarlo, use el mensaje TVM_HITTEST . Se especifica la dirección de una estructura TVHITTESTINFO que contiene las coordenadas actuales del puntero del mouse. Cuando se devuelve la función SendMessage , la estructura contiene una marca que indica la ubicación del puntero del mouse con respecto al control de vista de árbol. Si el puntero se encuentra sobre un elemento del control de vista de árbol, la estructura también contiene el identificador del elemento.

Puede indicar que un elemento es el destino de una operación de arrastrar y colocar mediante el mensaje TVM_SETITEM para establecer el estado en el valor de TVIS_DROPHILITED . Un elemento que tiene este estado se dibuja en el estilo utilizado para indicar un destino de arrastrar y colocar.

mensajes de notificación de control de Tree-View

Un control de vista de árbol envía los siguientes mensajes de notificación a su ventana primaria en forma de mensajes de WM_NOTIFY .

Notification Descripción
TVN_BEGINDRAG Indica el inicio de una operación de arrastrar y colocar.
TVN_BEGINLABELEDIT   Indica el inicio de la edición de etiquetas en contexto.
TVN_BEGINRDRAG Indica que el botón derecho del mouse ha iniciado una operación de arrastrar y colocar.
TVN_DELETEITEM Indica la eliminación de un elemento específico.
TVN_ENDLABELEDIT Indica el final de la edición de etiquetas.
TVN_GETDISPINFO Solicita información que el control de vista de árbol requiere para mostrar un elemento.
TVN_ITEMEXPANDED Indica que la lista de elementos secundarios de un elemento primario se ha expandido o contraído.
TVN_ITEMEXPANDING Indica que la lista de elementos secundarios de un elemento primario está a punto de expandirse o contraerse.
TVN_KEYDOWN Indica un evento de teclado.
TVN_SELCHANGED Indica que la selección ha cambiado de un elemento a otro.
TVN_SELCHANGING Indica que la selección está a punto de cambiarse de un elemento a otro.
TVN_SETDISPINFO Notifica a una ventana primaria que debe actualizar la información que mantiene para un elemento.

 

Procesamiento predeterminado de mensajes de control Tree-View

En esta sección se describe el procesamiento de mensajes de ventana realizado por un control de vista de árbol. Los mensajes específicos de los controles de vista de árbol se describen en otras secciones de este documento, por lo que no se incluyen aquí.

Message Procesamiento realizado
WM_COMMAND Procesa el EN_UPDATE y EN_KILLFOCUS editar mensajes de notificación de control y reenvía todas las demás notificaciones de control de edición a la ventana primaria. No hay ningún valor devuelto.
WM_CREATE Asigna memoria e inicializa estructuras de datos internas. Devuelve cero si es correcto o -1 de lo contrario.
WM_DESTROY Libera todos los recursos del sistema asociados al control. Devuelve cero.
WM_ENABLE Habilita o deshabilita el control.
WM_ERASEBKGND Borra el fondo de la ventana con el color de fondo actual para el control de vista de árbol. Devuelve TRUE.
WM_GETDLGCODE Devuelve una combinación de los valores de DLGC_WANTARROWS y DLGC_WANTCHARS.
WM_GETFONT Devuelve el identificador a la fuente de etiqueta actual.
WM_HSCROLL Desplaza el control de vista de árbol. Devuelve TRUE si se produce el desplazamiento o FALSE en caso contrario.
WM_KEYDOWN Envía el mensaje de notificación TVN_KEYDOWN a la ventana primaria para todas las claves. Envía el mensaje de notificación NM_RETURN (vista de árbol) cuando el usuario presiona la tecla ENTRAR. Mueve el símbolo de intercalación cuando el usuario presiona las teclas de dirección o la tecla PAGE UP, PAGE DOWN, HOME, END o BACKSPACE. Desplaza el control de vista de árbol cuando el usuario presiona la tecla CTRL en combinación con esas teclas. Devuelve TRUE si se procesa una clave o FALSE en caso contrario.
WM_KILLFOCUS Vuelve a dibujar el elemento centrado, si existe, y envía un mensaje de notificación de NM_KILLFOCUS (vista de árbol) a la ventana primaria.
WM_LBUTTONDBLCLK Cancela la edición de etiquetas y, si se hizo doble clic en un elemento, envía el mensaje de notificación NM_DBLCLK (vista de árbol) a la ventana primaria. Si la ventana primaria devuelve 0, el control de vista de árbol alterna el estado expandido del elemento, enviando a la ventana primaria los mensajes de notificación TVN_ITEMEXPANDING y TVN_ITEMEXPANDED . No hay ningún valor devuelto.
WM_LBUTTONDOWN Alterna el estado expandido si el usuario hace clic en el botón asociado a un elemento primario. Si el usuario hace clic en una etiqueta de elemento, el control de vista de árbol selecciona y establece el foco en el elemento. Si el usuario mueve el mouse antes de soltar el botón del mouse, el control de vista de árbol comienza una operación de arrastrar y colocar. No hay ningún valor devuelto.
WM_PAINT Pinta la región no válida del control de vista de árbol. Devuelve cero. Si el parámetro wParam no es NULL, el control asume que el valor es un identificador de un contexto de dispositivo (HDC) y pinta mediante ese contexto de dispositivo.
WM_RBUTTONDOWN Comprueba si se hizo clic en un elemento y se inició una operación de arrastre. Si se ha iniciado la operación, envía un mensaje de notificación TVN_BEGINRDRAG a la ventana primaria y resalta el destino de colocación. De lo contrario, envía un mensaje de notificación de NM_RCLICK (vista de árbol) a la ventana primaria. No hay ningún valor devuelto.
WM_SETFOCUS Vuelve a dibujar el elemento centrado, si existe, y envía un mensaje de notificación de NM_SETFOCUS a la ventana primaria.
WM_SETFONT Guarda el identificador de fuente especificado y vuelve a dibujar el control de vista de árbol con la nueva fuente.
WM_SETREDRAW Establece o borra la marca de volver a dibujar. El control de vista de árbol se vuelve a dibujar una vez establecida la marca redraw. Devuelve cero.
WM_SIZE Vuelve a calcular las variables internas que dependen del tamaño del área cliente del control de vista de árbol. Devuelve TRUE.
WM_STYLECHANGED Cancela la edición de etiquetas y vuelve a dibujar el control de vista de árbol con los nuevos estilos. Devuelve cero.
WM_SYSCOLORCHANGE Vuelve a dibujar el control de vista de árbol con el nuevo color si se establece la marca de nuevo dibujo. No hay ningún valor devuelto.
WM_TIMER Comienza a editar una etiqueta de elemento. Si el usuario hace clic en la etiqueta del elemento centrado, el control de vista de árbol establece un temporizador en lugar de entrar en modo de edición inmediatamente. El temporizador permite que la vista de árbol evite entrar en modo de edición si el usuario hace doble clic en la etiqueta. Devuelve cero.
WM_VSCROLL Desplaza el control de vista de árbol. Devuelve TRUE si se produce el desplazamiento o FALSE en caso contrario.

 

EJEMPLO: CustDTv ilustra el dibujo personalizado en un treeView (Q248496)