MFC - “hello world”中CFrameWnd :: LoadFrame()的问题

时间:2012-08-19 12:44:28

标签: visual-c++ mfc

所以,这是我的代码(为简单起见,我把它全部放在一个文件中):

#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中没有菜单。如何正确加载框架?我错过了什么?

1 个答案:

答案 0 :(得分:1)

你在尝试什么是行不通的。带有对话框ID的LoadFrame()将不会加载对话框。如果要使用对话框,请从CDialog派生CWnd或使用从CFormView派生的视图。您对LoadFrame的调用失败,因为您没有具有正确ID的菜单资源。但是,你并不是真的想要这样做。

我建议您使用应用程序向导生成基于对话框或基于CFormView的新应用程序,并查看生成的代码类型。您可以查看代码以了解您真正想要做的事情。