我不确定是否CMFCEditBrowseCtrl真的为此设计,但我想将其用作让用户从对话框中选择文件的一种方式,而不是手动使用一个按钮,其处理程序创建一个CFileDialog.
我遇到的问题是我想在选择文件时调用事件处理程序,但我不知道要捕获什么事件。我尝试使用,ON_EN_CHANGE但这使我的程序崩溃了 - 我单击了按钮,在打开文件窗口出现之前,我得到了一个奇怪的弹出窗口“无效的文件选择?????????” (或类似的,我这里没有代码),当我单击“确定”时,应用程序结束。
这是控件的有效使用吗?如果是,最小样本会是什么样子?
要回答您的“最小样本”问题:
使用 MFC 应用程序向导生成对话框应用程序。
在资源编辑器中,拖动MFC EditBrowse Control到对话框中。
右键单击该控件,选择Add Event Handler...;EN_CHANGE在列表中选择Message type:并(可选)更改Function handler name:.
(可选)再次右键单击该控件并选择Add Variable...;Control variable如果未选中,则选中复选框;Variable name:例如,键入 a m_browser。
这将添加
DDX_Control(pDX, IDC_MFCEDITBROWSE1, m_browser);
Run Code Online (Sandbox Code Playgroud)
给你的void CMFCDlgDlg::DoDataExchange(CDataExchange* pDX),
ON_EN_CHANGE(IDC_MFCEDITBROWSE1, &CMFCDlgDlg::OnEnChangeMfceditbrowse1)
Run Code Online (Sandbox Code Playgroud)
到消息映射,这个方法:
void CMFCDlgDlg::OnEnChangeMfceditbrowse1()
{
}
Run Code Online (Sandbox Code Playgroud)
我已将此代码添加到演示中,它可以工作:
void CMFCDlgDlg::OnEnChangeMfceditbrowse1()
{
CString str;
m_browser.GetWindowTextW(str);
}
Run Code Online (Sandbox Code Playgroud)