使用CMFCEditBrowseCtrl选择文件?

问题描述 投票:0回答:2

我不确定

CMFCEditBrowseCtrl
是否真的是为此设计的,但我想用它作为一种让用户从对话框中选择文件的方式,而不是手动使用一个按钮,其处理程序创建一个
CFileDialog

我遇到的问题是我想在选择文件时调用事件处理程序,但我不知道要捕获什么事件。我尝试使用

ON_EN_CHANGE
但这使我的程序崩溃了 - 我单击了按钮,在打开文件窗口出现之前,我得到了一个奇怪的弹出窗口“无效的文件选择?????????” (或类似的,我这里没有代码),当我单击“确定”时,应用程序结束。

这是控件的有效使用吗?如果是,最小样本会是什么样子?

mfc
2个回答
5
投票

回答您的“最小样本”问题:

  • 使用MFC App Wizard生成Dialog应用程序。

  • 在资源编辑器中,将

    MFC EditBrowse Control
    拖到对话框上。

  • 右键单击该控件,选择

    Add Event Handler...
    ;在
    EN_CHANGE
    列表中选择
    Message type:
    并(可选)更改
    Function handler name:

  • (可选)再次右键单击控件并选择

    Add Variable...
    ;如果未选中,请选中
    Control variable
    复选框;输入
    Variable name:
    ,例如
    m_browser

这将添加

DDX_Control(pDX, IDC_MFCEDITBROWSE1, m_browser);

给你的

void CMFCDlgDlg::DoDataExchange(CDataExchange* pDX)

ON_EN_CHANGE(IDC_MFCEDITBROWSE1, &CMFCDlgDlg::OnEnChangeMfceditbrowse1)

到消息映射,这个方法:

void CMFCDlgDlg::OnEnChangeMfceditbrowse1()
{
}

我已将此代码添加到演示中,它可以工作:

void CMFCDlgDlg::OnEnChangeMfceditbrowse1()
{
    CString str;
    m_browser.GetWindowTextW(str);
}

0
投票
  1. 创建一个对话框应用程序。在对话框设计器中,将 MFC 编辑控件拖到对话框上。
  2. 右键单击新放置的控件并选择 添加 可变... 选项。
  3. 在弹出的添加控制变量窗口中,更改 Category 选项从 ControlValue 并将变量命名为 名称字段。例如。 m_chosen_file。变量的类型 应该是CString
  4. 单击完成
  5. 再次右键单击该控件并选择 添加事件 处理程序... 选项。
  6. 在弹出的Event Handler窗口中,确保您的 在 Class list 选项中选择对话框类(默认为 CAboutDlg对我来说,这不是你想要的。)消息类型 选项应该已设置为 EN_CHANGE,如果没有,请更改它。然后 单击确定
  7. 您现在应该进入代码编辑器,光标位于 新添加的消息处理程序。您现在要做的就是添加一个 UpdateData(TRUE); 语句和所选文件的名称现在位于 m_chosen_file 变量。
void CBrowseEditDlg::OnEnChangeMfceditbrowse1()
{
    UpdateData(TRUE); // This call sends data from the dialog
                      // controls to the attached member variables,
                      // in this case the chosen file name. 
                      // Use FALSE to send data the opposite direction.

    // Do something with the file name
    AfxMessageBox(_T("You chose ") + m_chosen_file);
}
© www.soinside.com 2019 - 2024. All rights reserved.