2012-04-30 34 views
5

Tôi đang làm việc với dự án MFC win32. Tôi có hộp thoại với 2 điều khiển CMFCEditBrowseCtrl. Sau khi người dùng chỉ định tệp trên các điều khiển này, cách lấy đường dẫn tệp từ các điều khiển này?cách lấy văn bản đường dẫn từ CMFCEditBrowseCtrl?

Cập nhật: đây là mã của tôi

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

Kết quả trong "Debug Assertion Failed" lỗi trên dòng cuối cùng ...

Cập nhật 2:

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

Các cùng một lỗi "Gỡ lỗi xác nhận không thành công". Tôi sẽ cố gắng để có được văn bản trong khi hộp thoại không dissmissed.

Cập nhật 3 (giải quyết):

tôi quản lý để có được văn bản con đường bằng cách thực hiện cuộc gọi lại

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

Và trong phương pháp xử lý:

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

Vì vậy, suy nghĩ của bạn về việc nhận văn bản trong khi hộp thoại chưa đóng nhưng vẫn đúng. Xin vui lòng cập nhật câu trả lời của bạn vì vậy tôi có thể đánh dấu nó như là giải pháp.

Trả lời

4

CMFCEditBrowseCtrl được mở rộng từ CEdit và bạn có thể sử dụng GetWindowText/SetWindowText để truy cập tên tệp hiện được hiển thị.

Cập nhật

Chỉ cần làm:

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

Các khẳng định thất bại có thể là do bất kỳ số lý do (theo dõi vào nó để xem nguyên nhân). Bạn có thể phải lấy văn bản trong hộp thoại trước khi hộp thoại đóng.

+1

tài liệu cho GetWindowText: http://msdn.microsoft.com/en-us/library /db50wx7h(v=vs.100).aspx –

0

Bạn không thể gọi dlg. (Bất kỳ điều khiển nào) .GetWindowTextA SAU DoModal - trong thời gian này cửa sổ hộp thoại (cũng như tất cả các điều khiển con) không còn tồn tại nữa. Hãy thử sử dụng DDX của MFC (yêu cầu ràng buộc ràng buộc với CString) hoặc ghi đè phương thức OnOk trong hộp thoại của bạn - bên trong điều khiển phương thức này có thể truy cập được.

0

Bạn đang gặp lỗi vì cửa sổ bị đóng sau khi DoModal() trả về và GetWindowTextA là một hàm chung nhận được văn bản từ tay cầm cửa sổ. Thay vào đó, bạn muốn đặt giá trị này trong một chuỗi trong quá trình trao đổi DDX của MFC. Sử dụng Class Wizard, chọn lớp SpecifyInputDialog của bạn, sau đó chọn tab Biến thành viên (mặc định là tab Lệnh), và dưới đó chọn ID điều khiển cho điều khiển chỉnh sửa duyệt, và chọn Thêm biến. Trong Danh mục, thay đổi Kiểm soát thành Giá trị. Điều này sẽ thay đổi loại biến từ CMFCEditBrowseCtrl thành CString. Cung cấp cho tên CString của bạn, (nói inFileText), và phần còn lại là tự động. Bạn có thể chuỗi này như thế này:

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 

Các DDX Mã Hướng dẫn tạo trông như thế này:

void SpecifyInputDialog::DoDataExchange(CDataExchange* pDX) 
{ 
    CDialogEx::DoDataExchange(pDX); 
    DDX_Text(pDX, IDC_BROWSE, inFileText); 
} 
Các vấn đề liên quan