如何从CMFCEditBrowseCtrl获取路径文本

how to get path text from CMFCEditBrowseCtrl?

本文关键字:路径 文本 获取 CMFCEditBrowseCtrl      更新时间:2023-10-16

我正在做MFC win32项目。我有带有 2 个 CMFCEditBrowseCtrl 控件的对话框。用户在这些控件上指定文件后,如何从这些控件获取文件路径?

更新:这是我的代码

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

导致最后一行出现"调试断言失败"错误...

更新 2:

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

相同的"调试断言失败"错误。我将尝试在对话框未关闭时获取文本。

更新 3(已解决):

我设法通过实现回调来获取路径文本

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

在处理程序方法中:

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

因此,您关于在对话框尚未关闭时获取文本的想法是正确的。请更新您的答案,以便我可以将其标记为解决方案。

CMFCEditBrowseCtrl是从CEdit扩展而来的,您可以使用GetWindowText/SetWindowText来访问当前显示的文件名。

更新

只需做:

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

断言失败可能是由于多种原因造成的(跟踪它以查看原因)。在对话框关闭之前,您可能需要抓取对话框代码中的文本。

你不能调用 dlg.(任何控件)。GetWindowTextA AFTER DoModal - 此时对话框窗口(以及所有子控件)不再存在。请尝试使用 MFC 的 DDX(将所需的控件绑定到 CString)或在对话框中重写 OnOk 方法 - 在此方法中可以访问控件。

您会收到一个错误,因为在 DoModal() 返回后窗口关闭,并且 GetWindowTextA 是一个从窗口句柄获取文本的泛型函数。相反,您希望在 MFC 的 DDX 交换期间将此值放在字符串中。使用"类向导",选择 SpecifyInputDialog 类,然后选择"成员变量"选项卡(默认为"命令"选项卡),然后在该选项卡下选择浏览编辑控件的控件 ID,然后选择"添加变量"。在"类别"下,将"控件"更改为"值"。这会将变量类型从 CMFCEditBrowseCtrl 更改为 CString。给你的CString起一个名字,(比如inFileText),其余的都是自动的。你得到这个字符串,就像这样:

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

代码向导生成的 DDX 如下所示:

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