是否使用CMFCeditBrowsSectrl选择文件?
我不确定是否使用CMFCeditBrowsSectrl选择文件?,mfc,Mfc,我不确定CMFCEditBrowseCtrl是否真的是为此而设计的,但我想使用它作为一种方式,让用户从对话框中选择一个文件,而不是手动使用一个按钮,该按钮的处理程序创建一个CFileDialog 我遇到的问题是,我想在选择文件时调用事件处理程序,但我不知道要捕获什么事件。我试图在“更改”上使用,但这使我的程序崩溃了-我点击了按钮,在“打开文件”窗口出现之前,我得到了一个奇怪的弹出窗口“无效文件选择”(或类似的,我这里没有代码),当我点击“确定”时,应用程序结束 这是控件的有效使用吗?如果是,最小
CMFCEditBrowseCtrl
是否真的是为此而设计的,但我想使用它作为一种方式,让用户从对话框中选择一个文件,而不是手动使用一个按钮,该按钮的处理程序创建一个CFileDialog
我遇到的问题是,我想在选择文件时调用事件处理程序,但我不知道要捕获什么事件。我试图在“更改”上使用,但这使我的程序崩溃了-我点击了按钮,在“打开文件”窗口出现之前,我得到了一个奇怪的弹出窗口“无效文件选择”(或类似的,我这里没有代码),当我点击“确定”时,应用程序结束
这是控件的有效使用吗?如果是,最小样本是什么样的?回答“最小样本”问题:
- 使用MFC应用程序向导生成对话框应用程序
- 在资源编辑器中,将MFC EditBrowse控件拖动到对话框上
- 右键单击该控件,选择添加事件处理程序…
;在消息类型:
列表中选择EN\u CHANGE
,并(可选)更改函数处理程序名称:
复选框;键入一个变量名:
,例如m\u浏览器
DDX_Control(pDX, IDC_MFCEDITBROWSE1, m_browser);
要使您的无效,请使用CMFCDlgDlg::DoDataExchange(CDATA Exchange*pDX)
到消息映射,并使用此方法:
void CMFCDlgDlg::OnEnChangeMfceditbrowse1()
{
}
我在演示中添加了以下代码:
void CMFCDlgDlg::OnEnChangeMfceditbrowse1()
{
CString str;
m_browser.GetWindowTextW(str);
}
要回答您的“最小样本”问题,请执行以下操作:
- 使用MFC应用程序向导生成对话框应用程序
- 在资源编辑器中,将MFC EditBrowse控件拖动到对话框上
- 右键单击该控件,选择添加事件处理程序…;在
列表中选择消息类型:
,并(可选)更改EN\u CHANGE
函数处理程序名称:
- (可选)再次右键单击控件并选择添加变量…;如果未选中控制变量,则选中
复选框;键入一个
,例如变量名:
m\u浏览器
DDX_Control(pDX, IDC_MFCEDITBROWSE1, m_browser);
要使您的无效,请使用CMFCDlgDlg::DoDataExchange(CDATA Exchange*pDX)
到消息映射,并使用此方法:
void CMFCDlgDlg::OnEnChangeMfceditbrowse1()
{
}
我在演示中添加了以下代码:
void CMFCDlgDlg::OnEnChangeMfceditbrowse1()
{
CString str;
m_browser.GetWindowTextW(str);
}
ON_EN_CHANGE
是获取CMFCEditBrowseCtrl
结果的正确方法。你做错了什么。什么使你的程序崩溃了?是否捕获更改上的事件?或者你在处理程序中做了什么?我更新了更多细节。因此,在选择文件并关闭“文件浏览器”对话框后,应启动“更改”上的“更改”
?当编辑框中的文本以任何方式更改(用户键入、文件浏览器dlg关闭等)时,您将获得“更改”上的。当您出现该弹出窗口时,您能进入调试器并查看调用堆栈中的内容吗?ON_EN_CHANGE
是获取CMFCEditBrowseCtrl
结果的正确方法。你做错了什么。什么使你的程序崩溃了?是否捕获更改上的事件?或者你在处理程序中做了什么?我更新了更多细节。因此,在选择文件并关闭“文件浏览器”对话框后,应启动“更改”上的“更改”
?当编辑框中的文本以任何方式更改(用户键入、文件浏览器dlg关闭等)时,您将获得“更改”上的。当你有弹出窗口时,你能进入调试器看看调用堆栈中有什么吗?