大家可以参考msdn中的范例hello
我在这里也介绍一下
hello是一个MFC程序.
它有两个类(只有两个阿,开发人员是如何办到的?)
一个是从CWinApp派生
另一个是从CMainWnd派生
我始终无法用MFC向导生成这种框架.
哪位高手能给出生成这种框架的步骤.

解决方案 »

  1.   

    书上的例子:
    1、先建立一个Win32 Application的应用程序。
    2、选择Project->Add to project->Files,分别创建一个名为MyApp.h和一个名为MyApp.cpp的文件。
    3、添加代码:(最好照敲以下代码到编译器,别用Ctrl+C/Ctrl+V)
    //***********************************************
    //  MyApp.h    
    //class CMyApp:public CWinApp  //见下②
    {
    public:
        virtual BOOL InitInstance();
    };class CMyFrame:public CFrameWnd
    {
    public:
        CMyFrame();
    protected:
        afx_msg void OnLButtonDown(UINT nFlags,CPoint point);
        afx_msg void OnPaint();
        DECLARE_MESSAGE_MAP()
    };//*****************************************************
    //  MyApp.cpp
    //#include "afxwin.h"
    #include "myapp.h"
    CMyApp theApp;//建立一个CMyAPP对象见下②BOOL CMyApp::InitInstance ()
    {
        m_pMainWnd=new CMyFrame();
        m_pMainWnd->ShowWindow (m_nCmdShow);
        m_pMainWnd->UpdateWindow ();
        return TRUE;
    }BEGIN_MESSAGE_MAP(CMyFrame,CFrameWnd)
        ON_WM_LBUTTONDOWN()
        ON_WM_PAINT()
    END_MESSAGE_MAP()CMyFrame::CMyFrame(){
        Create(NULL,"MYAPP Application");
    }
    void CMyFrame::OnLButtonDown (UINT nFlags,CPoint point)
    {
        TRACE("Entering CMyFrame::OnLButtonDown - %lx,%d,%d\n",
        (long)nFlags,point.x ,point.y);
    }void CMyFrame::OnPaint ()
    {
        CPaintDC dc(this);
        dc.TextOut (0,0,"Hello World!");
    }4、编译运行,报错。为什么呢?原来还没有添加MFC的支持,在Project Setting选项General属性页选择”Use MFC in a Static Library"
    5、再Ctrl+F5,哈成功了。
    让我们看看这个程序中的一些元素。
    ①WinMain函数:并非不存在只是已经被隐藏在应用程序框架内部。
    ②CMyApp类:CMyApp类的对象代表一个应用程序,CWinApp基类决定它的大部分行为。
    ③应用程序的启动:当开始运行应用程序时WINDOWS会调用WinMain函数,WinMain会查找该应用程序的全局对象theApp。
    ④CMyApp::InitInstance成员函数:发现theApp后自动调用重载的虚函数InitInstance来完成主窗口的构造和显示工作。记住这个函数。
    ⑤CWinApp::Run成员函数:WinMain在调用InitInstance之后紧接着调用Run函数,它被隐藏在基类中负责传递应用程序的消息给相映的窗口。(我把它理解为好象SDK的窗口的过程函数不知对不对)
    ⑥CMyFrame类:此类的对象代表着应用程序的主窗口。它的构造函数调用基类CFrameWnd的Create函数创建具体的窗口结构。
    ⑦CMyFrame::OnLButtonDown函数:演示消息处理机制,当鼠标坐键被按下这一事件被映射到CMyFrame的OnLButtonDown函数上,如果你选择F5进行编译运行的话可以在调试窗口看到TRACE宏显示的类似下面的信息
        Entering CMyFrame::OnLButtonDown - 1,309,119
        Entering CMyFrame::OnLButtonDown - 1,408,221
    ⑧CMyFrame::OnPaint函数:应用程序每次重新绘制窗口都需要调用此函数,将显示"Hello World!"放在这里是因为每次窗口发生变化时保证"Hello World!"被显示,你可以试着将语句:
        CPaintDC dc(this);
        dc.TextOut (0,0,"Hello World!");
    写在别出,例如写在
    void CMyFrame::OnLButtonDown (UINT nFlags,CPoint point)
    {
        TRACE("Entering CMyFrame::OnLButtonDown - %lx,%d,%d\n",
        (long)nFlags,point.x ,point.y);
        CPaintDC dc(this);
        dc.TextOut (0,0,"Hello World!");
    }
    运行后当点击左键时显示"Hello World!",但当窗口最小化再最大化时"Hello World!"不见了。
    ⑧关闭应用程序:用户关闭应用程序时会有一系列事件发生。首先CMyFrame对象被删除,然后退出Run,进而退出WinMain,最后删除CMyApp对象。通过上面的示例我们看见程序的大部分功能包含在基类CWinApp和CFrameWnd中,我们只写了很少的函数,便可以完成很复杂的功能。所以应用程序框架不仅仅是一种类库,它还定义了应用程序的结构,除了基类外还包括WinMain函数,以及用来支持消息处理、诊断、DLL、等都包含在应用程序框架中。
      

  2.   

    创建一个空win32项目,然后设置为MFC程序,添加这两个类
    或者用向导生成一个,然后手工删除
      

  3.   

    建立一个WIN 32的项目hello,选中MFC支持。然后把其中的代码用例子中的覆盖了
      

  4.   

    呵呵,《深入浅出MFC》上有个例子,就是只用CWinApp和CMainFrame做的,原来如此。
      

  5.   

    我这么做(楼上)因为不能直接用Wizard向导生成此例子的框架,MSDN自己都说了:
      一些示例(如此示例)没有经过修改以反映 Visual C++ 向导、库和编译器的变化,但仍说明了如何完成所需的任务。
      

  6.   

    property1(路标) 兄台的方案是我以前努力的方法.
    不过没有结果.
    huaboy408(闭关修练) 兄台的方法也太过分了点吧!
    hjiaming(佳名猫) 兄台能否说明白一点如何设置为MFC程序
    无定乾坤在此感谢大家的回复!
      

  7.   

    huaboy408(闭关修练) 的方法好厉害 啊!
      

  8.   

    pjincz(无定乾坤)兄,我看了你发的消息了。其实大家都给你说的很清楚了:
    现在有2种方法:
    1、用Wizard定制一个Win 32 App或者 控制台程序,然后你在接着出来的提示中选
    "控制台程序"->右边会出来"MFC",你选中即可;然后你再粘贴相关代码;(其实 huaboy408(闭关修练) 说的很详细了。)
    2、你做一个MFC程序,然后把里面的东东都不要,从CWinApp,和CFrameWnd派生自己的类(学Hello那样)。(property1(路标)其实已经说了)
      

  9.   


    再补充一句:
    请参阅《深入浅出MFC》简体中文版 p234。 :)