2012-04-30 18 views
5

MFC win32 projesi üzerinde çalışıyorum. 2 CMFCEditBrowseCtrl denetimleriyle iletişimim var. Kullanıcı bu denetimlerdeki dosyaları belirledikten sonra, bu denetimlerden dosya yolları nasıl alınır? GüncellemeCMFCEditBrowseCtrl adresinden yol metni nasıl alınır?

: Burada

... lütfen

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

Sonuçları "ayıklama onaylama işlemi başarısız" sondaki hata Güncelleme 2 benim kodudur:

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

aynı "Debug Assertion Başarısız" hatası. Diyalog kurulmazken metin almaya çalışacağım.

Güncelleme 3 (çözüldü):

Ben geri arama

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

uygulayarak Ve işleyici yönteminde yolu metni başardı:

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

Yani metni alma hakkında düşünce diyalog kapalı olmasa da haklıydı. Lütfen cevabınızı güncelleyin, böylece çözüm olarak işaretleyebilirim.

cevap

4

CMFCEditBrowseCtrl, CEdit'ten genişletilmiştir ve şu anda görüntülenen dosya adına erişmek için GetWindowText/SetWindowText'u kullanabilirsiniz.

Güncelleme

Hemen yapın:

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

başarısız iddia nedeniyle birçok nedenden dolayı (nedenini görmek için içine iz) bağlı olabilir. İletişim kutusu kapanmadan önce iletişim kutusundaki metni almanız gerekebilir.

+1

docs:

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 

Kod Sihirbazı tarafından oluşturulan DDX şöyle http://msdn.microsoft.com/en-us/library /db50wx7h(v=vs.100).aspx –

0

dlg. (Herhangi bir denetim) .GetWindowTextA SONRA DoModal'ı çağıramazsınız - bu sırada iletişim penceresi (tüm çocuk denetimlerinin yanı sıra) artık yoktur. Lütfen MFC'nin DDX'ini (gerekli kontrolün CString'e bağlanmasını) kullanmayı deneyin veya diyaloğunuzdaki OnOk yöntemini geçersiz kılın - bu yöntemin kontrollerine erişilebilir.

0

DoModal() döndükten sonra pencere kapandığı ve GetWindowTextA, metni pencere tanıtıcısından alan genel bir işlev olduğu için bir hata alıyorsunuz. Bunun yerine, MFC'nin DDX değişimi sırasında bu değeri bir dizeye koymak istersiniz. Sınıf Sihirbazını kullanarak, SpecifyInputDialog sınıfınızı seçin, ardından Üye Değişkenler sekmesini (varsayılan olarak Komutlar sekmesi) seçin ve altında gözatma düzenleme kontrolü için kontrol kimliğini seçin ve Değişken Ekle'yi seçin. Kategori altında, Denetimi Değeri olarak değiştirin. Bu, değişken türünü CMFCEditBrowseCtrl'den CString'e değiştirir. CString'inize bir isim verin (inFileText deyin) ve gerisi otomatik. Böyle bu dizeye olsun: GetWindowText için

void SpecifyInputDialog::DoDataExchange(CDataExchange* pDX) 
{ 
    CDialogEx::DoDataExchange(pDX); 
    DDX_Text(pDX, IDC_BROWSE, inFileText); 
} 
İlgili konular