【发布时间】:2020-02-18 23:40:13
【问题描述】:
我有一个包含 MFC EditBrowse 控件的对话框类型的应用程序。此控件在右侧包含一个文件夹/放大镜图标,用户应该单击该图标以弹出文件夹浏览器弹出窗口。
该文件夹/放大镜图标在 Visual Studio 的对话框编辑器中正确显示,但在运行时它显示为一个普通的平面按钮。否则,它的行为正常 - 即,当用户单击“确定”时,会弹出浏览器弹出窗口并显示所选文件夹。
使用调试器运行时,VS 输出窗口中会显示一条消息“无法加载位图:4299”。该消息显示在我的 OnInitDialog() 中的 CDialogEx::OnInitDialog() 行之后。
我已经编写了测试程序,它们可以正确显示图标。我还在我的原始程序中添加了额外的 EditBrowse 控件,但他们遇到了同样的问题,只是添加了另一行“无法加载位图”。我还添加了其他 MFC 控件,其中一些控件也不显示其图标(或其他内容)。
通过从 OnInitDialog 调用 EnableBrowseButton() 和 EnableFolderBrowswButton(),我设法稍微影响了这个问题。如果我这样做,我会得到一个看起来像 3 个水平点的图标:
哪个更好,但我更喜欢文件夹/放大镜图标。
这是一个足够复杂的应用程序,我不想从头开始重写它,而且我想了解发生了什么。我相当肯定这是在开发应用程序时添加/删除控件的结果,但不知道从哪里开始追踪出错的地方。
关于如何调试的想法?顺便说一句,这是 VS 2010。
【问题讨论】:
-
检查您的 *.rc 文件。你看到这条线了吗:
#if !defined(_AFXDLL) ... #include "afxribbon.rc" ... #endif?那就是该资源应该在的地方 ("browe32.bmp") -
感谢@BarmakShemirani 的回复!我没有看到 #include "afxribbon.rc" 行。但是我也没有在正常工作的测试程序中看到这一点。我在工作示例目录中搜索了“afxribbon”,并在 .sdf、pdb、tlog、pch 和 stdafx.obj 文件中找到了匹配项。但我似乎在非工作样本中得到了相同的基本结果。同样,在 browse32 上的搜索(我假设您的“browe32.bmp”中有错字?)在 .sdf 和 pch 中显示工作和非工作程序的结果。我也应该指出这是我正在使用的 VS 2010。
-
@BarmakShemirani 哎呀!!您已引导我进行修复/解决方法!我最后只是停留在 app.rc 文件中的 #include "afxribbon.rc" (没有 #if !def 东西),现在我有了我的文件夹图标。如果您想将其写为答案,我会接受。
标签: visual-studio mfc