我增加了两个摸板,一个基于CTreeView,一个基于CFormView
我在CChildFrame的OnCreateClient中添加了切分视图的程序
我现在想知道的时怎样双击主框架下的一个菜单时,能将这两个视图同时显示出来
希望能得到帮助。
我在CChildFrame的OnCreateClient中添加了切分视图的程序
我现在想知道的时怎样双击主框架下的一个菜单时,能将这两个视图同时显示出来
希望能得到帮助。
解决方案 »
- MFC中ListBox选中当前项进行操作的问题
- select模型疑问?
- 系统类名冲突
- VC有没有和CFileDialog类似的对话框不打开或者保存文件,只需要文件目录?
- 请问如何从网上获得格林威治标准时间, 并将其转变为本地的北京时间?
- 如何为Visual c++ 创建属性表
- 怎样实现在文本文档中查找一个词,如“工业”?
- 为什么 _ConnectionPtr 没有定义?MSDN 中总是直接用之,而我用时就被提示没有定义!
- 重新启动计算机
- 怎样将16进制数转换成VARIANT型值?
- 请问:我在用一个控件中出现error C2017: illegal escape sequence错误.是怎么造成的呢?
- 不会吧,这个问题都没人能搞定啊,ado 和 dao 有冲突时.......?????????
winthegame(120斤重的大青蛙) 说的我都已经做了,就差在按钮对应的函数下编程了
快没分了,希望大家抓紧挣分机会
机不可失,时不再来哦!):
BOOL CMyApp::InitInstance()
{.....
//创建基于一个文档两视图的框架(左视图为树视图,右视图为FormView)
pDocTemplate =new CMultiDocTemplate(
IDR_MYTYPE,
RUNTIME_CLASS(CMyDoc),
RUNTIME_CLASS(CChildFrame),
RUNTIME_CLASS(CLeftView));
AddDocTemplate(pDocTemplate);
pDocTemplate =new CMultiDocTemplate(
IDR_MYTYPE,
RUNTIME_CLASS(CMyDoc),
RUNTIME_CLASS(CChildFrame),
RUNTIME_CLASS(CChartOutView));
AddDocTemplate(pDocTemplate);
......}
BOOL CChildFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
// TODO: Add your specialized code here and/or call the base class
if (!m_wndSplitter.CreateStatic(this, 1, 2))
return FALSE; if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CLeftView), CSize( 100, 100), pContext) ||
!m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CChartOutView), CSize(0, 0), pContext))
{
m_wndSplitter.DestroyWindow();
return FALSE;
}
// SetActiveView((CTreeView*)m_wndSplitter.GetPane(0,0));
return TRUE;
// return CMDIChildWnd::OnCreateClient(lpcs, pContext);
}
然后我希望单击报表按钮时,显示这个框架
void CMainFrame::OnChartOut()
{
// TODO: Add your command handler code here 这儿该怎样编阿
}
BOOL CMainFrame::OnCreateClient( LPCREATESTRUCT /*lpcs*/,CCreateContext* pContext)
{
m_wndSplitter.CreateStatic( this, 2, 1 );
m_wndSplitter.CreateView( 0, 0, RUNTIME_CLASS( CMyListView1 ), CSize(0,200 ), pContext );
m_wndSplitter.CreateView( 1, 0, RUNTIME_CLASS( CMyListView2), CSize( 0, 200 ), pContext );
CMyListView *pView = (CMyListView *) m_wndSplitter.GetPane( 0, 0 );
pView->SetUniqueName( "MYVIEW1" );
pView = (CMyListView *) m_wndSplitter.GetPane( 1, 0 );
pView->SetUniqueName( "MYVIEW2" );
return true;
}这样就可以显示出来了。
void CMainFrame::OnChartOut()
{
// TODO: Add your command handler code here CDocTemplate* pTemplate=((CMyApp*)AfxGetApp())->pDocTemplate;
pTemplate->OpenDocumentFile(NULL);
return;
}
可以打开一个文档,但没法将两视图都打开
既然所有拆分窗口总是可见的,那么通过菜单控制它们的显示/隐藏有何意义呢!自相矛盾呀!我猜你的真实意图是想通过菜单实现不同视图的切换吧?(压根不用拆分窗口!)我给你一段经典代码:
//ON_COMMAND(ID_SWITCH_VIEW1,OnSwitchView1)
//ON_COMMAND(ID_SWITCH_VIEW2,OnSwitchView2)CDoubleFrame_CApp::OnSwitchView1()
{
EnterSpecialSystem("Tree");
}
CDoubleFrame_CApp::OnSwitchView2()
{
EnterSpecialSystem("Form");
}
BOOL CDoubleFrame_CApp::EnterSpecialSystem(const CString& sTargetSystem)
{
CDocTemplate* curTemplate;
CString sDocName;
POSITION pos=GetFirstDocTemplatePosition();
while(pos!=NULL)
{
curTemplate=GetNextDocTemplate(pos);
if(curTemplate!=NULL)
{
curTemplate->GetDocString(sDocName,CDocTemplate::docName);
TRACE("%s\n",sDocName);
if(sDocName==sTargetSystem)
{
curTemplate->OpenDocumentFile(NULL);
return TRUE;
}
}
}
return FALSE;
}}
但我想你还是不明白我的意思,我做的程序因为报表只是其中的一部分
所以我想把它在一个菜单下实现,即点击一个菜单,出现象资源管理器那样的视图
资源管理器也是点击文件夹菜单出现的。我想知道的也就是这文件夹按钮下的程序怎样编。
方法一:通过((CMainFrame *)m_pMainWnd)->m_Spliterr.GetPane(...)
在CMainFrame中定义三个View的指针指向三个View:m_pOne,m_pTwo,m_pThree;在CMainFrame(你自己的框架窗口,下同)中添加一个方法:TriggerTwo(/*相应参数*/);在View中定义一个方法Trigger进行相应的动作(你自己的功能)
方法二:单击One的事件中写如下代码:
(CMainFrame*)AfxGetMainWnd()-〉TriggerTwo()
TriggerTwo中编写如下代码:
m_pTwo->Trigger(/*相关参数*/)方法三:另外,也可在CViewTwo中自定义一个消息,实现你的功能,然后在CViewOne的事件中编写消息发送代码:
SendMessage((CMainFrame*)AfxGetMainWnd()-〉m_pTwo->m_hWnd,WM_USER1,/*传过去的参数*/)