2012-04-30 14 views
5

Pracuję nad projektem MFC win32. Mam okno dialogowe z 2 kontrolkami CMFCEditBrowseCtrl. Kiedy użytkownik określi pliki w tych kontrolkach, w jaki sposób uzyskać ścieżki plików z tych elementów sterujących?jak uzyskać tekst ścieżki z CMFCEditBrowseCtrl?

Aktualizacja: tutaj jest mój kod

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

Wyniki w "Debug asercja nie" błąd na ostatniej linii ...

Aktualizacja 2:

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

taki sam błąd "Błąd braku debugowania". Postaram się uzyskać tekst, a dialog nie zostanie zignorowany.

Update 3 (rozwiązany):

udało mi się ścieżka tekstowa poprzez wdrożenie zwrotnego

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

A w metodzie Handler:

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

Więc myśl o uzyskanie tekstu podczas gdy okno dialogowe nie jest zamknięte, ale było w porządku. Proszę zaktualizować swoją odpowiedź, aby móc oznaczyć ją jako rozwiązanie.

Odpowiedz

4

CMFCEditBrowseCtrl został rozszerzony z CEdit i można użyć GetWindowText/SetWindowText, aby uzyskać dostęp do aktualnie wyświetlanej nazwy pliku.

Aktualizacja

Wystarczy zrobić:

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

Nieudany twierdzenie może wynikać z wielu powodów (trace do niego aby zobaczyć przyczynę). Być może będziesz musiał pobrać tekst w oknie dialogowym przed zamknięciem okna dialogowego.

+1

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

0

Nie można wywołać dlg. (Dowolnej kontroli) .GetWindowTextA AFTER DoModal - w tym czasie okno dialogowe (jak również wszystkie elementy podrzędne) już nie istnieje. Proszę spróbować użyć DDX MFC (powiązanie kontroli do CString) lub przesłonić metodę OnOk w oknie dialogowym - wewnątrz tej metody dostępne są kontrolki.

0

Otrzymujesz błąd, ponieważ okno jest zamykane po zwróceniu DoModal(), a GetWindowTextA jest funkcją ogólną, która pobiera tekst z uchwytu okna. Zamiast tego chcesz umieścić tę wartość w ciągu znaków podczas wymiany DDX MFC. Za pomocą Kreatora klasy wybierz swoją klasę SpecifyInputDialog, a następnie wybierz kartę Zmienne członkowskie (domyślnie jest to karta Polecenia), a następnie wybierz identyfikator kontrolki kontroli przeglądania i wybierz opcję Dodaj zmienną. W kategorii zmień kontrolę na wartość. Spowoduje to zmianę typu zmiennej z CMFCEditBrowseCtrl na CString. Nadaj CStringowi nazwę (powiedz inFileText), a reszta jest automatyczna. Można dostać się do tego łańcucha tak:

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 

Kodeks Kreator generowane DDX wygląda następująco:

void SpecifyInputDialog::DoDataExchange(CDataExchange* pDX) 
{ 
    CDialogEx::DoDataExchange(pDX); 
    DDX_Text(pDX, IDC_BROWSE, inFileText); 
} 
Powiązane problemy