如何添加一个CFormVew的派生类到对话框 我在网上也找了相关的资料,发现网上的例子不合适,因为,设了断点发现根本就不走初始化函数,哪位大哥以前做过这种编程,给小弟指点一下,谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 CFormVew不就是为了在文档视图类程序中实现象对话框那样能添加控件的功能吗?在对话框程序中用它做什么? 首先在资源里面添加一个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_DATApublic: 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_VIRTUALprotected: 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就会出现在对话框上。 基于对话的主窗口的句柄是会改变的么? 怎样释放掉加载在内存中的xml? 关于图象缩小的问题! 点击按钮的时候怎么触发对话框的OnLButtonDown? ——*-初学者问题,如何实现文件上传,给点指导都能领分-*—— 两个com组件使用连接点? 在一个线程里面同时调用两次recv会有问题吗? 在DLL中可以使用多线程技术吗?如果可以,需要注意什么问题?最好有代码示范!谢谢。 在VB用winsock控件数组做winsock服务器比在VC++中用多线程做winsock服务器有什么缺点? usb通信编程 【求助】如何让程序自动登陆网易或雅虎邮箱? vc++2005如何连接SQLSERVER2005
添加这个类后到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就会出现在对话框上。