【问题标题】:Issue enabling folder browse button on CMFCEditBrowseCtrl问题在 CMFCEditBrowseCtrl 上启用文件夹浏览按钮
【发布时间】:2020-12-31 00:57:53
【问题描述】:

以下是资源管理器针对此特定 EditBrowseCtrl 显示的内容。您可以看到“浏览模式”选项设置为“文件夹浏览”。

这是我运行程序时实际对话框的样子(没有浏览按钮):

我也尝试通过EnableFolderBrowseButton 方法启用文件夹浏览按钮,但以下只是给我一个通用的“遇到不正确的参数”异常。

CMFCEditBrowseCtrl* pEdit;
pEdit = (CMFCEditBrowseCtrl*)GetDlgItem(IDC_MFCEDITBROWSE);
pEdit->EnableFolderBrowseButton();

根据要求,这是 .rc 文件的内容:

/////////////////////////////////////////////////////////////////////////////
//
// Dialog Info
//

IDD_PREFERENCES_PROPPAGE DLGINIT
BEGIN
    IDC_MFCLINK1, 0x37c, 175, 0
0x4d3c, 0x4346, 0x694c, 0x6b6e, 0x555f, 0x6c72, 0x733e, 0x7379, 0x616c, 
0x2e74, 0x6f63, 0x3c6d, 0x4d2f, 0x4346, 0x694c, 0x6b6e, 0x555f, 0x6c72, 
0x3c3e, 0x464d, 0x4c43, 0x6e69, 0x5f6b, 0x7255, 0x506c, 0x6572, 0x6966, 
0x3e78, 0x7468, 0x7074, 0x3a73, 0x2f2f, 0x2f3c, 0x464d, 0x4c43, 0x6e69, 
0x5f6b, 0x7255, 0x506c, 0x6572, 0x6966, 0x3e78, 0x4d3c, 0x4346, 0x694c, 
0x6b6e, 0x545f, 0x6f6f, 0x746c, 0x7069, 0x3c3e, 0x4d2f, 0x4346, 0x694c, 
0x6b6e, 0x545f, 0x6f6f, 0x746c, 0x7069, 0x3c3e, 0x464d, 0x4c43, 0x6e69, 
0x5f6b, 0x7546, 0x6c6c, 0x6554, 0x7478, 0x6f54, 0x6c6f, 0x6974, 0x3e70, 
0x4146, 0x534c, 0x3c45, 0x4d2f, 0x4346, 0x694c, 0x6b6e, 0x465f, 0x6c75, 
0x546c, 0x7865, 0x5474, 0x6f6f, 0x746c, 0x7069, "\076" 
    IDC_MFCEDITBROWSE, 0x37c, 42, 0
0x4d3c, 0x4346, 0x6445, 0x7469, 0x7242, 0x776f, 0x6573, 0x4d5f, 0x646f, 
0x3e65, 0x3c32, 0x4d2f, 0x4346, 0x6445, 0x7469, 0x7242, 0x776f, 0x6573, 
0x4d5f, 0x646f, 0x3e65, 
    0
END

非常感谢任何帮助。

【问题讨论】:

  • 使用准系统 MFC 对话框不会重复该问题,因此在未显示的代码的其他地方必须存在差异。见How to create a Minimal, Reproducible Example
  • 你好@dxiv。如有必要,我可以暂时将项目公开。这似乎是我能够解决这个问题的唯一方法,因为我需要在我当前的代码库中修复这个问题,而且我不知道问题可能出在哪里。
  • 能否请您从对话框资源文件中显示控件的 RC sn-p?
  • 我看到了这个:stackoverflow.com/questions/46362484/…。出于兴趣,您使用的是CWinApp 还是CWinAppEx
  • 观察一下,你显示的RC数据并不是对话框上的实际控制,而是初始化数据。对话框本身的实际控制看起来有点像文件中的CONTROL "",IDC_MFCEDITBROWSE,"MfcEditBrowse",WS_BORDER | WS_TABSTOP | 0x80,17,51,330,14。它位于 RC 的不同位置。但不用担心。 :)

标签: visual-c++ mfc afx


【解决方案1】:

我终于发现我的问题是覆盖 OnInitDialog 而不调用基类 OnInitDialog (CDialogEx::OnInitDialog)。

【讨论】:

  • 啊,是的。您始终需要调用基类,通常在通过 IDE 添加覆盖时默认添加。很好地解决了这个问题。
  • 谢谢。这对我来说绝对是一个糟糕的事情。我“手动”编写了这个特定的函数覆盖,这导致了这个问题。
猜你喜欢
  • 2017-06-09
  • 1970-01-01
  • 2017-09-16
  • 1970-01-01
  • 2012-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多