Obtener el verdadero nombre de la actualidad, seleccione archivo en el diálogo de archivo común?

StackOverflow https://stackoverflow.com/questions/1757093

Pregunta

Uno puede conseguir el texto del elemento seleccionado en la lista de vista de un diálogo común.Pero uno NO puede conseguir su PIDL, y si el usuario ha elegido para ocultar extensiones conocidas (el valor predeterminado), entonces uno no puede decir lo que el archivo se ha seleccionado sin su extensión o su PIDL.

De modo que las posibles formas de solucionar esto podría ser:

  1. Obtener un IShellView de la diálogo estándar abrir archivo.El subyacente IShellView puede decir lo el PIDL para la actual selección.Así que si me podía simplemente llegar ahold de la IShellView, me gustaría ser de oro.Por desgracia, veo que no hay CDM_xxx que haría.Y Yo no se puede pensar fuera de la parte superior de mi cabeza de cualquier cosa que pudiera lograrlo!!!:(
  2. Alguna otra idea?!

Estamos acostumbrados a confiar en el hecho de que el Windows 9x, 2000, XP y la versión del archivo común de diálogo almacena cada elemento PIDL en el LVITEM de datos (original del crédito a Pablo DiLascia):

LPCITEMIDLIST pidlItem = (LPCITEMIDLIST)pListCtrl->GetItemData(nItem);

Sin embargo, comenzando con Vista común de los controles y, encima, que la técnica de falla :(

Los pensamientos?

EDITAR:Necesito ser capaz de obtener esta información, no sólo para el elemento actualmente seleccionado en la vista de lista, pero para todos los elementos en la vista de lista.

EDIT2:La razón por la que la necesidad de cavar tan profundo:

En versiones anteriores de nuestra aplicación nos proporciona la capacidad para:(1) Presione un botón personalizado "vista previa" que cierra el cuadro de diálogo, pero las transferencias a la aplicación de la lista de elementos que se muestra actualmente en la vista, en su orden visible, junto con el índice de la que actualmente resaltado.Esta lista debe estar completamente especificada - ver los 3 archivos que son todos "J1329192" (cuando en realidad hay 3 archivos "J1329192.xyz" "J1329192.xyz" y "J1329192.zyx" [en ese orden) no es útil.

Los usuarios pueden escriba un nombre de archivo parcial de filtro en el "nombre de archivo:" campo, y el común de diálogo sólo se mostrarán los archivos que coincidan con los parciales de filtro, en el criterio de ordenación que el usuario ha elegido.De modo que presente un informe a la aplicación exactamente lo que el usuario quería de vista previa requiere que seamos capaces de consulta de la información de la vista de lista de control (o el cuadro de diálogo comunes a sí mismo).

Otras mejoras para el archivo de diálogo como bien incluyendo un lugar en el panel de vista previa que se muestra al usuario la selección actual como una imagen en miniatura, así como tienen la costumbre de los últimos lugares de la interfaz, etc.Todo esto fue posible (con mucho trabajo) antes de la Vista.Post Vista, se han topado con pared a pared.Por el momento, vamos a usar un cuadro de diálogo estándar con sólo algunas de las características de la nuestra, que no se sienta bien con los clientes (lo que le sucedió a la característica X?!)

Hay otras mejoras, pero que una buena visión general.Y todos ellos se reducen a la que requiere el conocimiento de "realmente, honestamente, ¿qué archivo en concreto es en la vista de índice X?" Y por razones desconocidas - Microsoft no parece sentir la necesidad de proporcionar este tipo de interfaz.De hecho, nunca lo hicieron.Sólo a través de algunos de hacking y la ingeniería inversa, hemos podido averiguar cómo funcionaban las cosas bajo el capó y obtener la información necesaria.Y sí, que sin el apoyo, y sí, MS inevitablemente rompió nuestro código.Yo realmente no los culpo por ello - ¿qué me lo encuentro desagradable es que su más reciente, más elegantes de la interfaz es mucho más cerrado que el de sus mayores, de uno y no dar más adelantado interfaces las interfaces compatibles - para hacer de este cuadro de diálogo mejoras.Es como que tuvo un gran par de pasos hacia atrás - y ninguno hacia delante (en nombre del progreso).

¿Fue útil?

Solución

WM_USER + 7 para obtener el navegador, y a continuación, obtener su activa la interfaz de vista de shell IShellView.

Usted sabe la consecuencia habitual de utilizar indocumentado derecha comportamiento?

Otros consejos

Ah, lo encontré. Usted querrá usar IFileOpenDialog para Vista, que debe explicilty apoyo todas aquellas operaciones que usted ha mencionado.

Sé que esto es un viejo hilo, pero, en Vista +, los cuadros de diálogo de estilo antiguo están siendo soportados. Puede desactivar Vista-estilo y conservar todos sus controles personalizados como antes. Eso es lo que hacemos: tenemos una ventana de vista previa personalizada en una plantilla enganchado en CFileDialog, que parece ser imposible de reproducir en IFileDialog.

Creo que necesita para pasar falsa en un parámetro BOOL en el constructor para desactivar los cuadros de diálogo de estilo Vista.

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