es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Actualizando la visualización de la ruta del directorio/carpeta en el diálogo de apertura de archivos de MFC.

Tengo una aplicación de Visual Studio 2022 MFC en la cual el usuario puede especificar las ubicaciones de carpeta predeterminadas de ciertos tipos de archivos utilizados/manejados por la aplicación (por ejemplo, txt, jpeg, xls…). El usuario puede especificar los directorios predeterminados a través de un diálogo dedicado con casillas de edición de “Explorar carpeta” para cada uno de los diferentes tipos de archivos. Los detalles de las carpetas seleccionadas se guardan en una entrada del Registro de Windows.

Cuando el usuario inicia el conocido diálogo “Abrir archivo”, el filtro de tipo de archivo por defecto se establece para mostrar archivos .txt. Y ADEMÁS la ruta del directorio/carpeta muestra la ruta predeterminada especificada por el usuario para archivos .txt.

PERO SI es posible, me gustaría que la ruta de directorio mostrada/carpeta predeterminada se actualice/cambie automáticamente SI el usuario cambia el filtro de tipo de archivo (por ejemplo, cambia de archivos .txt a .bmp).

¿Es posible hacer esto con el diálogo de “Abrir archivo” de MFC?
Gracias de antemano a cualquier persona que pueda ayudar.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible actualizar/cambiar la ruta de directorio mostrada/carpeta predeterminada cuando el usuario cambia el filtro de tipo de archivo en el diálogo ‘Abrir archivo’ de MFC. Puede utilizar la función OnTypeChange() para detectar cuando el usuario cambia el filtro de tipo de archivo y luego actualizar la ruta de directorio en consecuencia. Aquí tienes un ejemplo de fragmento de código:

    “`c++
    void CMyDialog::OnTypeChange()
    {
    CString filtro;
    m_pFileDialog->GetFileTypeIndex(); // Obtener el índice del tipo de archivo seleccionado
    m_pFileDialog->GetFileType(filtro, m_pFileDialog->m_ofn.nMaxCustFilter); // Obtener el filtro del tipo de archivo seleccionado
    CString delimitador = _T(“|”);
    CString token;
    int i = 0;
    int pos = filtro.Find(delimitador);
    while (pos != -1)
    {
    token = filtro.Mid(i, pos – i);
    if (i == 0)
    {
    CString ext = token.Mid(token.Find(_T(‘.’)) + 1);
    UpdateFolderPath(ext);
    }
    i = ++pos;
    pos = filtro.Find(delimitador, pos);
    }
    }

    void CMyDialog::UpdateFolderPath(CString ext)
    {
    // Actualizar la ruta de la carpeta según la extensión del archivo
    CString ruta;
    if (ext == _T(“txt”))
    ruta = m_txtFolderPath;
    else if (ext == _T(“bmp”))
    ruta = m_bmpFolderPath;
    else if (ext == _T(“jpg”))
    ruta = m_jpgFolderPath;
    // Establecer la ruta de la carpeta actualizada
    m_pFileDialog->m_ofn.lpstrInitialDir = ruta;
    }
    “`

    En este ejemplo, OnTypeChange() es la función que se llama cuando el usuario cambia el filtro de tipo de archivo. La función obtiene el índice y filtro del tipo de archivo seleccionado, y luego analiza la cadena del filtro para extraer la extensión del archivo. Luego, llama a la función UpdateFolderPath() para actualizar la ruta de la carpeta según la extensión del archivo. La función UpdateFolderPath() utiliza una simple declaración if-else para determinar la ruta de la carpeta según la extensión del archivo, y luego establece la variable m_ofn.lpstrInitialDir del diálogo ‘Abrir archivo’ de MFC con la ruta de la carpeta actualizada.

    Puede modificar el código según tus requisitos para actualizar la ruta de la carpeta para diferentes tipos de archivos.

Comments are closed.