2012-04-30 7 views
5

Estoy trabajando en el proyecto win32 de MFC. Tengo un diálogo con 2 controles CMFCEditBrowseCtrl. Después de que el usuario especifique los archivos en estos controles, ¿cómo obtener rutas de archivos desde estos controles?cómo obtener texto de ruta de CMFCEditBrowseCtrl?

Actualización: aquí es mi código

SpecifyInputDialog dlg; // this is my dialog inherited from CDialogEx 
dlg.DoModal(); 
CString strText; 
dlg.inFileCtrl.GetWindowTextA(strText.GetBuffer(), 500); // inFileCtrl is CMFCEditBrowseCtrl object 

Resultados en "depuración de aserción" error en la última línea de ...

Actualización 2:

CString strText; 
dlg.inFileCtrl.GetWindowText(strText); 

El mismo error de "error de aserción de depuración". Trataré de obtener texto mientras el diálogo no se desaprovecha.

Actualización 3 (resuelto):

logré texto de trazado mediante la implementación de devolución de llamada

BEGIN_MESSAGE_MAP(SpecifyInputDialog, CDialogEx) 
    ON_EN_CHANGE(IDC_MFCEDITBROWSE1, &SpecifyInputDialog::OnEnChangeMfceditbrowse1) 
END_MESSAGE_MAP() 

Y en método de control:

void SpecifyInputDialog::OnEnChangeMfceditbrowse1() 
{ 
    this->inFileCtrl.GetWindowText(this->inFileString); 
} 

Por lo que su pensamiento acerca de cómo obtener el texto mientras que el diálogo no está cerrado todavía era correcto. Por favor, actualice su respuesta para que pueda marcarlo como solución.

Respuesta

4

CMFCEditBrowseCtrl se extiende desde CEdit y puede usar GetWindowText/SetWindowText para acceder al nombre de archivo que se muestra actualmente.

actualización

Just Do:

CString strText; 
dlg.inFileCtrl.GetWindowText(strText); 

La afirmación no podría ser debido a una serie de razones (rastrear en él para ver la causa). Puede que tenga que tomar el texto en el código de diálogo antes de que se cierre el cuadro de diálogo.

+1

Docs para GetWindowText: http://msdn.microsoft.com/en-us/library /db50wx7h(v=vs.100).aspx –

0

No puede llamar a dlg. (Any control) .GetWindowTextA DESPUÉS de DoModal - en este momento la ventana de diálogo (así como todos los controles secundarios) ya no existe. Intente utilizar el DDX de MFC (enlace del control obligatorio a CString) o anule el método OnOk en su cuadro de diálogo: dentro de este método, se puede acceder a los controles.

0

Se produce un error porque la ventana se cierra después de que DoModal() retorna y GetWindowTextA es una función genérica que obtiene el texto del manejador de la ventana. En cambio, desea poner este valor en una cadena durante el intercambio DDX del MFC. Usando el Asistente de clase, seleccione su clase SpecifyInputDialog, luego elija la pestaña Variables del miembro (la pestaña Comandos es el predeterminado), y debajo de eso elija la ID de control para el control de edición de exploración, y elija Agregar variable. En Categoría, cambie Control a Valor. Esto cambiará el tipo de variable de CMFCEditBrowseCtrl a CString. Dale a tu CString un nombre, (digamos inFileText), y el resto es automático. Se llega a esta cadena como esta:

SpecifyInputDialog dlg; // this is my dialog inherited from CDialogEx 
dlg.DoModal(); 
CString strText; 
strText = dlg.inFileText; // after the data exchange, this has what you need 

El DDX generado por el Asistente de código es el siguiente:

void SpecifyInputDialog::DoDataExchange(CDataExchange* pDX) 
{ 
    CDialogEx::DoDataExchange(pDX); 
    DDX_Text(pDX, IDC_BROWSE, inFileText); 
} 
Cuestiones relacionadas