我在网上也找了相关的资料,发现网上的例子不合适,因为,设了断点发现根本就不走初始化函数,哪位大哥以前做过这种编程,给小弟指点一下,谢谢!

解决方案 »

  1.   

    CFormVew不就是为了在文档视图类程序中实现象对话框那样能添加控件的功能吗?在对话框程序中用它做什么?
      

  2.   

    首先在资源里面添加一个FormView,双击出现对话框让你添加类,不要选择使用存在的类,新建一个类例如:CFmv
    添加这个类后到CFmv头文件中将CFmv(); 从Protect改到Public  还有重写Creat这个虚函数。CFmv这个类里面做了这些后,不用再做任何其他改变了。
    具体如下:
    class CFmv : public CFormView
    {
    protected:
             
        DECLARE_DYNCREATE(CFmv)
    public:
        //{{AFX_DATA(CFmv)
        enum { IDD = IDD_FORMVIEW1 };  //注意这里的ID
             // NOTE: the ClassWizard will add data members here
        //}}AFX_DATA
    public:
        CFmv();  //改到Public下面
    public:
        //{{AFX_VIRTUAL(CFmv)
        public:
        virtual BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL);  //重写Creat函数,在ClassWizard里面找,别弄错了,不是WM_CREAT事件处理啊。
        protected:
        virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
        //}}AFX_VIRTUAL
    protected:
        virtual ~CFmv();
    //......在你的Dialog头文件中声明一个指针: CFmv* fMV; 
    下面到你的Dialog的OnInitDialog()函数里面去添加代码:
    BOOL CIrregularDlg::OnInitDialog()
    {
        CDialog::OnInitDialog();
        //........
        fMV = ( CFmv* ) new CFmv();  //构造
        CRect fmRt;                  //在Dialog上要显示的位置,大小最好跟你在资源里面设定的相同
        fmRt.top = 100;
        fmRt.left = 100;
        fmRt.bottom = 300;
        fmRt.right = 300;
        fMV->Create( NULL, NULL, 0L, fmRt, this, IDD_FORMVIEW1 ); //使用Creat创建,注意里面的IDD_FORMVIEW1必须是CFmv里面那个ID
                                                                  //这就是为什么前面要重写CFmv的Creat的原因,不重写这里会提示保护函数不能使用
        fMV->OnInitialUpdate();                                   //调用初始化函数,这里主要是FormView上控件的创建等。
          
        fMV->ShowWindow(SW_SHOW);                                 //显示
     
        return TRUE;
    }同过上面这么弄你的FormView就会出现在对话框上。