如何从CMFCEditBrowseCtrl获取路径文本?

时间:2012-04-30 12:35:00

标签: c++ visual-studio-2010 winapi mfc

我正在使用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);

同样的" Debug Assertion Failed"错误。我将尝试在对话未被解除的情况下获取文本。

更新3(已解决):

我设法通过实现回调

来获取路径文本
BEGIN_MESSAGE_MAP(SpecifyInputDialog, CDialogEx)
  ON_EN_CHANGE(IDC_MFCEDITBROWSE1, &SpecifyInputDialog::OnEnChangeMfceditbrowse1)
END_MESSAGE_MAP()  

在处理程序方法中:

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

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

3 个答案:

答案 0 :(得分:4)

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

<强>更新

只是做:

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

失败的断言可能是由于多种原因(追查它以查​​明原因)。您可能必须在对话框关闭之前抓取对话框代码中的文本。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您收到错误是因为在DoModal()返回后窗口关闭,而GetWindowTextA是从窗口句柄获取文本的通用函数。相反,您希望在MFC的DDX交换期间将此值放入字符串中。使用类向导,选择您的SpecifyInputDialog类,然后选择Member Variables选项卡(默认为Commands选项卡),在其下选择浏览编辑控件的控件ID,并选择Add Variable。在类别下,将控制更改为值。这会将变量类型从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);
}