首先, 请问如何做到创建子窗口,现在我是调用App类的OnFileNew方法得到子窗口的。
然后再调用子窗口的ShowWindow(SW_HIDE)将其隐藏,这种效果让人很不满意。
而且调用OnFileNew只能创建即定的view作为CChildFrame的子窗口,不能指定view。
有谁对MDI窗口控制比较熟悉的,给点相关资料和指导好吗?
解决方案 »
- 系统怎么管理文件在硬盘中排布问题?(怎么寻找非连续的文件)
- 我准备把内存中的html数据显示在chtmlview中,但是显示完成后为什么自动又转到“无法显示”了?????
- 请教一个关于文件读写的问题
- c++ ado 怎么调用存储过程,返回结构集 如一个表
- “更改工程图标”想问一下各位大侠
- 旋转图形有没有和SetWorldTransform类似的函数
- 一窍不通,问个ie方面的问题啊~~~~~~~
- 第一次提问,请帮帮忙,两个问题。
- 怎样在对话框控件的caption中加入特殊字符?
- 请教:IE编程中导入(出)收藏夹的函数是什么?
- socket问题,在线等待
- 简单问题,请问利用mfc怎么制作dll,APIENTRY和DLLMain什么意思
如果你觉得显示的时机不到,干脆就不要生成它好了。
如果有一个视图(叫MyView吧)要通过自已建立的[菜单1]显示出来.如果又有另一个视图(MyView2)要通过点击自已建立的[菜单2]显示出来.该如何做?
(因为直接用OnFileNew系统打开的是已定的视图,如果有多个视图运行时会让你选择,而自已选择性的打开指定的视图就是楼主想要的),隐藏的问题在这里反而不重要了,只要ShowWindow(SW_HIDE);就可以了.
pDocTemplate = new CMultiDocTemplate(
IDR_MULTIDTYPE,
RUNTIME_CLASS(CMultiDocTestDoc),
RUNTIME_CLASS(CChildFrame), // custom MDI child frame
RUNTIME_CLASS(CMultiDocTestView));
AddDocTemplate(pDocTemplate);//不要这一行也成 m_pMyDocTemplate = new CMultiDocTemplate(
IDR_MULTIDTYPE,
RUNTIME_CLASS(CMultiDocTestDoc),
RUNTIME_CLASS(CChildFrame), // custom MDI child frame
RUNTIME_CLASS(CMyFrmView));
// AddDocTemplate(m_pMyDocTemplate);这一行不能要然后在你的某菜单或其它事件中添加,如:
CMDIChildWnd* pActiveChild = MDIGetActive();
CDocument* pDocument;
if (pActiveChild == NULL ||
(pDocument = pActiveChild->GetActiveDocument()) == NULL)
{
TRACE0("Warning: No active document for WindowNew command.\n");
AfxMessageBox(AFX_IDP_COMMAND_FAILURE);
return; // command failed
} // otherwise we have a new frame !
CDocTemplate* pTemplate = ((CMultiDocTestApp*)AfxGetApp())->m_pMyDocTemplate;
ASSERT_VALID(pTemplate);
CFrameWnd* pFrame = pTemplate->CreateNewFrame(pDocument, pActiveChild);
if (pFrame == NULL)
{
TRACE0("Warning: failed to create new frame.\n");
return; // command failed
} pTemplate->InitialUpdateFrame(pFrame, pDocument);
它就显示出来了,否则就不显示了
BOOL CEasyAccApp::InitInstance()
{
{
CMultiDocTemplate* pCtlCenterDocTemplate = new CMultiDocTemplate(
IDR_CTLCENTER_TMPL,
RUNTIME_CLASS(CEasyAccDoc),
RUNTIME_CLASS(CChildFrame),
RUNTIME_CLASS(CCtlCenter));
//AddDocTemplate(pCtlCenterDocTemplate);这个注释掉 CMultiDocTemplate* pDocTemplate;
pDocTemplate = new CMultiDocTemplate(IDR_EasyAccTYPE,
RUNTIME_CLASS(CEasyAccDoc),
RUNTIME_CLASS(CChildFrame), // 自定义 MDI 子框架
RUNTIME_CLASS(CEAFromView));
if (!pDocTemplate)
return FALSE;
AddDocTemplate(pDocTemplate);.....后面的代码略(注:后面还有一个
这样处理后点击新建就只会打开后面那个CEAFromView了,不用再选择视图.
但是我新建一个菜单并映射后:
void CMainFrame::OnCtlcenter()
{
CMDIChildWnd* pActiveChild = MDIGetActive();
CDocument* pDocument;
if (pActiveChild == NULL ||
(pDocument = pActiveChild->GetActiveDocument()) == NULL)
{
TRACE0("Warning: No active document for WindowNew command.\n");
AfxMessageBox(AFX_IDP_COMMAND_FAILURE);
return; // command failed
} // otherwise we have a new frame !
CDocTemplate* pTemplate =((CEasyAccApp*)AfxGetApp())-> m_pCtlCenterDocTemplate;
ASSERT_VALID(pTemplate);
CFrameWnd* pFrame = pTemplate->CreateNewFrame(pDocument, pActiveChild);
if (pFrame == NULL)
{
TRACE0("Warning: failed to create new frame.\n");
return; // command failed
} pTemplate->InitialUpdateFrame(pFrame, pDocument);
}程序编译时总报错说m_pCtlCenterDocTemplate不是CEasyAccApp的成员,改了好多次,都调试不成功,也就是这一句不知应该怎么设:
CDocTemplate* pTemplate =((CEasyAccApp*)AfxGetApp())-> m_pCtlCenterDocTemplate;我将这个菜单命令映射到mianframe里对不对啊?如果不对应如何处理,谢谢您!!!