MFC - “hello world”中的 CFrameWnd::LoadFrame() 问题
Posted
技术标签:
【中文标题】MFC - “hello world”中的 CFrameWnd::LoadFrame() 问题【英文标题】:MFC - Problems with CFrameWnd::LoadFrame() in "hello world" 【发布时间】:2012-08-19 12:44:27 【问题描述】:所以,这是我的代码(为简单起见,我将它们全部放在一个文件中):
#include <afxwin.h>
#include "resource.h"
class CMainWnd : public CFrameWnd
;
class CApp : public CWinApp
public:
virtual BOOL InitInstance()
CMainWnd* wnd = new CMainWnd();
if (!wnd->Create(0, _T("test"))) return FALSE;
m_pMainWnd = wnd;
wnd->ShowWindow(SW_SHOW);
wnd->UpdateWindow();
return TRUE;
;
CApp app;
它使用默认参数和标题“test”创建简单的窗口。完美运行。但是,我想从资源中加载我的窗口,所以我可以给它一些东西。我替换:
if (!wnd->Create(0, _T("test"))) return FALSE;
与
if (!wnd->LoadFrame(IDD_CLIENTWINDOW)) return FALSE;
(IDD_CLIENTWINDOW
是资源中我的对话框的 ID)。 LoadFrame 返回 FALSE,程序退出。输出中有调试信息:
Warning: failed to load menu for CFrameWnd.
但我创建的对话框IDD_CLIENTWINDOW
中没有菜单。如何正确加载框架?我错过了什么?
【问题讨论】:
调试到 LoadFrame 以查看哪个步骤失败。 您缺少 IDD_CLIENTWINDOW 菜单资源。这正是 CFrameWnd::LoadFrame 的工作方式。如果要使用此功能,请创建具有该 ID 的菜单。 【参考方案1】:您正在尝试的方法不起作用。带有对话框 ID 的 LoadFrame() 不会加载对话框。如果要使用对话框,请使 CWnd 从 CDialog 派生或使用从 CFormView 派生的视图。您对 LoadFrame 的调用失败,因为您没有具有正确 ID 的菜单资源。但是,您并没有真正尝试这样做。
我建议您使用 AppWizard 生成基于对话框或基于 CFormView 的新应用程序,并查看生成的代码类型。您可以查看代码以了解您真正想要做什么。
【讨论】:
以上是关于MFC - “hello world”中的 CFrameWnd::LoadFrame() 问题的主要内容,如果未能解决你的问题,请参考以下文章
按照第一个 hello world 示例在 VS2010 中出现编译错误
csharp Zenject教程中的“Hello容器/门面的Hello World示例”示例
csharp Zenject教程中的“Hello容器/门面的Hello World示例”示例