VC MDI子窗体怎么创建,我创建完的子窗体怎么能让主菜单发生变化,而且窗口的菜单项可以激活这个窗口?
1、从File菜单选取New,并应用MFCAppWizard(exe)选项来创建唯一新的工程,工程名为TEST。选取MultipleDocuments选项,并且选取Doc...
1、从 File 菜单选取 New ,并应用 MFC AppWizard(exe) 选项来创建唯一新的工程,工程名为 TEST。选取 Multiple Documents 选项,并且选取Document/View architechture support。
2、 从CtestApp的成员参数中InitInstance()中删除以下内容
CMultiDocTemplate* pDocTemplate;
pDocTemplate = new CMultiDocTemplate(
IDR_TESTTYPE,
RUNTIME_CLASS(CTestDoc),
RUNTIME_CLASS(CChildFrame), // custom MDI child frame
RUNTIME_CLASS(CTestView));
AddDocTemplate(pDocTemplate);
3、创建自定义的框架类CMyFrame:,该类的基类为CMDIChildWnd。
4、进入资源管制器,添加FORMVIEW,IDD_FORMVIEW,生成对应的视图类CMyView,基类为CformView。
5、目前已经创建完咱们需求的框架和视图,下面的务工是把CmyFrame和CmyView停止连接。在CmyFrame中添加成员变量CMyView *m_pMyView;然后在OnCreate成员参数中加入以下内容:
CRect rect; GetClientRect(&rect);
m_pMyview=new CMyView; if(!m_pMyview->Create(NULL,NULL,AFX_WS_DEFAULT_VIEW ,rect,this,AFX_IDW_PANE_FIRST , NULL))
{
TRACE0("Failed to create view window\n");
return 0;
} //AFX_WS_DEFAULT_VIEW*/
在OnSize参数中加入
CRect rect;
this->GetClientRect (rect);
m_pMyview ->MoveWindow( rect.left ,rect.top,rect.Width(),rect.Height(),TRUE);
在那里需求指出的的是要把CmyView和CmyFrame的构造参数改成public类别,同时要重载CmyView的Create参数。
6、进入资源管制器中在菜单IDR_MAINFRAME中加入IDM_TEST菜单项,在对应的处理参数中加入以下代码Code:
m_pMyframe=new CMyFrame;
m_pMyframe->Create(NULL,NULL,WS_CHILD | WS_VISIBLE | WS_OVERLAPPEDWINDOW, rectDefault);
m_pMyframe->ShowWindow(SW_SHOW);
m_pMyframe->UpdateWindow();
当然m_pMyFrame必需要在 CmainFrame中先定义了。
7、编译运行,选取Test菜单项,就能够打开咱们定义的窗口,那样处理后,能够删除列表下的testdoc.*和childframe.*,TestView.*以及源程式中的所有与之有关的头文档,形成唯一简单的工程。
我是用上面方法创建的,创建完该怎么删除这个指针?主窗体菜单怎么变化呢?谢谢1
m_pMyframe怎么删除,能说具体点么?谢谢!难道在主窗口的WM_DESTROY 消息中,可我现在可能创建的不是一个窗体呀? 展开
2、 从CtestApp的成员参数中InitInstance()中删除以下内容
CMultiDocTemplate* pDocTemplate;
pDocTemplate = new CMultiDocTemplate(
IDR_TESTTYPE,
RUNTIME_CLASS(CTestDoc),
RUNTIME_CLASS(CChildFrame), // custom MDI child frame
RUNTIME_CLASS(CTestView));
AddDocTemplate(pDocTemplate);
3、创建自定义的框架类CMyFrame:,该类的基类为CMDIChildWnd。
4、进入资源管制器,添加FORMVIEW,IDD_FORMVIEW,生成对应的视图类CMyView,基类为CformView。
5、目前已经创建完咱们需求的框架和视图,下面的务工是把CmyFrame和CmyView停止连接。在CmyFrame中添加成员变量CMyView *m_pMyView;然后在OnCreate成员参数中加入以下内容:
CRect rect; GetClientRect(&rect);
m_pMyview=new CMyView; if(!m_pMyview->Create(NULL,NULL,AFX_WS_DEFAULT_VIEW ,rect,this,AFX_IDW_PANE_FIRST , NULL))
{
TRACE0("Failed to create view window\n");
return 0;
} //AFX_WS_DEFAULT_VIEW*/
在OnSize参数中加入
CRect rect;
this->GetClientRect (rect);
m_pMyview ->MoveWindow( rect.left ,rect.top,rect.Width(),rect.Height(),TRUE);
在那里需求指出的的是要把CmyView和CmyFrame的构造参数改成public类别,同时要重载CmyView的Create参数。
6、进入资源管制器中在菜单IDR_MAINFRAME中加入IDM_TEST菜单项,在对应的处理参数中加入以下代码Code:
m_pMyframe=new CMyFrame;
m_pMyframe->Create(NULL,NULL,WS_CHILD | WS_VISIBLE | WS_OVERLAPPEDWINDOW, rectDefault);
m_pMyframe->ShowWindow(SW_SHOW);
m_pMyframe->UpdateWindow();
当然m_pMyFrame必需要在 CmainFrame中先定义了。
7、编译运行,选取Test菜单项,就能够打开咱们定义的窗口,那样处理后,能够删除列表下的testdoc.*和childframe.*,TestView.*以及源程式中的所有与之有关的头文档,形成唯一简单的工程。
我是用上面方法创建的,创建完该怎么删除这个指针?主窗体菜单怎么变化呢?谢谢1
m_pMyframe怎么删除,能说具体点么?谢谢!难道在主窗口的WM_DESTROY 消息中,可我现在可能创建的不是一个窗体呀? 展开
1个回答
展开全部
在窗口销毁函数里面删除
添加WM_DESTROY 消息响应函数
CMyFrame::DestroyWindow()
{
m_pMyview->CloseWindow();
delete m_pMyview;
}
你最好可以在初始化时将m_pMyview=NULL;在在程序运行中可以根据需要判断窗口是否已经创建。
主菜单就是在CmainFrame里添加IDM_TEST消息响应ON_COMMAND
m_pMyframe是与m_pMyview相连的,只要m_pMyview关闭了,相应的资源就释放掉了,就像CMainFrame* pMainFrame = new CMainFrame;同样不需要手动删除。
添加WM_DESTROY 消息响应函数
CMyFrame::DestroyWindow()
{
m_pMyview->CloseWindow();
delete m_pMyview;
}
你最好可以在初始化时将m_pMyview=NULL;在在程序运行中可以根据需要判断窗口是否已经创建。
主菜单就是在CmainFrame里添加IDM_TEST消息响应ON_COMMAND
m_pMyframe是与m_pMyview相连的,只要m_pMyview关闭了,相应的资源就释放掉了,就像CMainFrame* pMainFrame = new CMainFrame;同样不需要手动删除。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询