我必须对使用MFC开发的现有应用程序进行更改。此应用程序使用带有Document \ View架构的SDI模板。我需要在执行应用程序时显示的窗口上放置一个图标。目前它没有任何图标显示(默认情况下某些MFC应用程序显示MFC徽标)。有人可以帮帮我吗?我用谷歌搜索了很多但没有取得任何成功。 另外我想知道为什么我们为resource.h文件中的所有资源使用IDR_MAINFRAME(相同名称)。我发现它的价值固定在128.这有什么特别的原因吗?如果你之前遇到过,请在MFC上建议一些好的链接或书籍吗?
答案 0 :(得分:3)
这是Visual Studio后期版本的已知问题。我尽我所能,它仍然无法正常工作。最后我找到了其他地方的解决方案。您必须强制应用程序按代码使用图标:
BOOL CMyApp::InitInstance()
{
...........
CWinAppEx::InitInstance();
...........
HICON hIcon = LoadIcon(IDR_MAINFRAME);
HICON hPrev = pMainFrame->SetIcon(hIcon,FALSE);
if (hPrev != NULL && hPrev != hIcon)
DestroyIcon(hPrev);
return TRUE;
}
答案 1 :(得分:0)
我建议您创建一个新的MFC应用程序,以查看默认值。您应该在.RC文件中看到有一行看起来像这样:
IDR_MAINFRAME ICON "res\\app.ico"
如果不存在,您可以添加它。查看MFC文件winfrm.cpp,您可以看到MFC尝试加载CFrameWnd::GetIconWndClass()
中的图标
HICON hIcon = ::LoadIconW(hInst, ATL_MAKEINTRESOURCEW(nIDResource));
由于资源是通过其类型和ID标识的,因此您可以对不同类型的多个资源使用相同的ID。当MFC框架代码需要加载工具栏,菜单和图标等而不需要开发人员需要为每个项目指定不同的id时,这非常有用。
我在MFC上看过的最好的MFC书是Mike Blaszczak的“专业MFC”。它没有一些新的“MFC功能包”添加,但它很好地涵盖了旧的东西。我还建议您下载像Agent Ransack这样的源搜索工具,以便搜索MFC源代码。
答案 2 :(得分:0)