Pregunta

Pregunta :

¿Alguien sabe cómo cambiar el directorio actual de un diálogo de archivo abierto que ya se está ejecutando?

Detalles :

Tengo un cuadro de diálogo de archivo abierto personalizado (que usa una plantilla personalizada para agregar controles adicionales) que también tiene todas las validaciones, comprobaciones existentes y pruebas de creación desactivadas (a través de los indicadores OpenFileName).

Desactivar esas cosas deshabilita el comportamiento incorporado del diálogo que hará que cambie la carpeta que se muestra actualmente si el usuario escribe un nombre de carpeta en el " nombre de archivo " cuadro combinado y presiona la tecla Intro.

Me gustaría agregar ese comportamiento nuevamente. Puedo detectar cuando esto sucede a través del procedimiento de enlace. He ocultado el botón Aceptar, apagué su acelerador y puse mi propio " seleccione " botón en el control. Esto significa que la única vez que recibo un mensaje CDN_FILEOK es cuando el usuario presiona enter en el cuadro de texto después de escribir.

Sin embargo, no puedo entender cómo decirle programáticamente al diálogo que cambie el directorio actual.

Estaba pensando que podría lograr esto enviando algún tipo de mensaje al control SHELLDLL_DefView en la ventana, pero no he podido encontrar ninguna documentación al respecto.

¿Fue útil?

Solución 2

Pude resolver un problema.

Resulta que cuando la validación está desactivada, escribe un nombre de directorio que termina en " \ " seguirá cambiando la carpeta que se muestra, pero escribiendo un nombre de directorio que no termine en " \ " no lo hará.

Usando spy ++ pude ver que cuando se presiona Enter, se enviará un mensaje WM_COMMAND al control de diálogo común con un argumento wParam cuya palabra de orden superior es BN_CLICKED y cuya palabra de orden inferior es ID_OK.

Si subclasifico el cuadro de diálogo común, puedo interceptar el mensaje, cambiar el texto en el cuadro combinado de nombre de archivo, reenviar el mensaje al procedimiento de subclase original y luego volver a cambiar el texto.

Es un poco pirateo, pero me permite obtener el comportamiento que quiero del diálogo.

Otros consejos

No estoy seguro de la respuesta directa, pero si tiene SPY ++ o cualquier otro programa de indagación de mensajes, intente verificar los mensajes que aparecen cuando cambia el directorio normal de un diálogo OpenFileName. Puede descubrir la respuesta allí (aunque es la salida difícil).

Sin embargo, alguien más podría saber la respuesta de antemano; esperemos que lo hagan.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top