请问如何根据不同的视图,来选择不同的菜单,谢谢! 例如有CView1,对应菜单Cmenu1,Cview2对应菜单cMenu2,如何在激活cview1的时候,菜单为cmenu1,激活cview2的时候,菜单为cmenu2 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 CMultiDocTemplate* pDocTemplate; pDocTemplate = new CMultiDocTemplate( IDR_MDITESTYPE,//指明了用到的资源 RUNTIME_CLASS(CMDITestDoc), RUNTIME_CLASS(CChildFrame), // custom MDI child frame RUNTIME_CLASS(CMDITestView)); AddDocTemplate(pDocTemplate); CSingleDocTemplate* pDocTemplate; pDocTemplate = new CSingleDocTemplate( IDR_MAINFRAME, RUNTIME_CLASS(CSDI_Two_DocDoc), RUNTIME_CLASS(CMainFrame), // main SDI frame window RUNTIME_CLASS(CSDI_Two_DocView)); AddDocTemplate(pDocTemplate); CSingleDocTemplate* pDocTemplate2; pDocTemplate2=new CSingleDocTemplate( IDR_MENU_EDITVIEW, RUNTIME_CLASS(CSDI_Two_DocDoc), RUNTIME_CLASS(CEditFrame), RUNTIME_CLASS(CWriteEdit)); AddDocTemplate(pDocTemplate2); 如果每个视图是对应于不同的文档的话MFC已经有很好的实现。如果不是对应于同一文档的话。参照一下MFC的中下面这个函数的原代码:(在WinMDI.cpp中)CMDIChildWnd::OnUpdateFrameMenuOnUpdateFrameMenu(BOOL bActivate, CWnd* pActivateWnd,HMENU hMenuAlt) psusong(人类失去指针,世界将会怎样?) 说的对。 to: psusong(人类失去指针,世界将会怎样?) 我在*.cpp文件中按照您的方法定义了文档莫板,如下://〉〉〉〉〉〉〉〉〉〉〉〉〉〉CMultiDocTemplate* pDocTemplate; pDocTemplate = new CMultiDocTemplate( IDR_DFDFMETYPE, RUNTIME_CLASS(CDfdfmenuDoc), RUNTIME_CLASS(CChildFrame), // custom MDI child frame RUNTIME_CLASS(CDfdfmenuView)); AddDocTemplate(pDocTemplate); CMultiDocTemplate* pDocTemplate1; pDocTemplate1 = new CMultiDocTemplate( IDR_MENU1, RUNTIME_CLASS(CDfdfmenuDoc), RUNTIME_CLASS(CChildFrame), // custom MDI child frame RUNTIME_CLASS(CTestEdit)); AddDocTemplate(pDocTemplate1);//《〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈然后切换视图,如下://>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>void CMainFrame::SwitchView(enum eview nview){ CView* pOldView=GetActiveView(); CView* pNewView=(CView*)GetDlgItem(nview); if(pNewView==NULL) { switch(nview) { case TEST: pNewView=(CView*)new CTestEdit; break; case TETET: pNewView=(CView*)new CDfdfmenuView; break; } CCreateContext context; context.m_pCurrentDoc=pNewView->GetDocument(); pNewView->Create(NULL,NULL,WS_BORDER,CFrameWnd::rectDefault, this,nview,&context); pNewView->OnInitialUpdate(); } SetActiveView(pNewView); pNewView->ShowWindow(SW_SHOW); if(pOldView!=NULL) { pOldView->ShowWindow(SW_HIDE); pOldView->SetDlgCtrlID(pOldView->GetRuntimeClass()==RUNTIME_CLASS(CTestEdit)?TEST:TETET); } pNewView->SetDlgCtrlID(AFX_IDW_PANE_FIRST); RecalcLayout();}//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<可是菜单还是切换不过来,而且视图的刷新也有问题,麻烦你帮我看一下,好吗?如果方便,请留下邮箱,我把程序发给你,很急的,谢谢! 为什么要把菜单去掉呢,不符合界面学原则.如果一个菜单不能使用,应该是灰掉,而不是移走.在appwizard里面,把菜单响应事件写在视图类里面,这样当选中别的视图时,菜单自动灰掉.你不用写一行代码你有见VC将哪个菜单项移走吗 看来你用的是分隔窗口,这样用psusong(人类失去指针,世界将会怎样?) 方法是不行的,因为那样能成功的前提是你使用不同的文档模板,也就是说两次调用new CMultiDocTemplate时第二个参数RUNTIME_CLASS(CDfdfmenuDoc),应该是不同的,你这样试吧,在你的各个view类中添加OnActivate消息处理函数,如下:CMyView::OnActivate( UINT nState, CWnd* pWndOther, BOOL bMinimized ){ if(窗口被激活) GetParentFrame->OnUpdateFrameMenu(m_hmymenu);} vc修改数据库修改数据库记录(Debug R6010) 怎样按窗口列举进程 基于对话框的工程中的CEdit中输入数据的问题 修改的查询语句? 求救:不知那位大虾知道,在VC中如何实现对话框的的拖拽功能。 求MFC图形代码 还是那个工具栏问题,重新问一遍(加到100分)... 在VC中如何使用WMI得到系统的硬件和软件信息? 怎样将文件添加到cab文件中???? 求助 已经一共200分了,没人来吗? 有什么软件公司招毕业生??
pDocTemplate = new CMultiDocTemplate(
IDR_MDITESTYPE,//指明了用到的资源
RUNTIME_CLASS(CMDITestDoc),
RUNTIME_CLASS(CChildFrame), // custom MDI child frame
RUNTIME_CLASS(CMDITestView));
AddDocTemplate(pDocTemplate);
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CSDI_Two_DocDoc),
RUNTIME_CLASS(CMainFrame), // main SDI frame window
RUNTIME_CLASS(CSDI_Two_DocView));
AddDocTemplate(pDocTemplate);
CSingleDocTemplate* pDocTemplate2;
pDocTemplate2=new CSingleDocTemplate(
IDR_MENU_EDITVIEW,
RUNTIME_CLASS(CSDI_Two_DocDoc),
RUNTIME_CLASS(CEditFrame),
RUNTIME_CLASS(CWriteEdit));
AddDocTemplate(pDocTemplate2);
(在WinMDI.cpp中)
CMDIChildWnd::OnUpdateFrameMenuOnUpdateFrameMenu(BOOL bActivate, CWnd* pActivateWnd,HMENU hMenuAlt)
我在*.cpp文件中按照您的方法定义了文档莫板,如下:
//〉〉〉〉〉〉〉〉〉〉〉〉〉〉
CMultiDocTemplate* pDocTemplate;
pDocTemplate = new CMultiDocTemplate(
IDR_DFDFMETYPE,
RUNTIME_CLASS(CDfdfmenuDoc),
RUNTIME_CLASS(CChildFrame), // custom MDI child frame
RUNTIME_CLASS(CDfdfmenuView));
AddDocTemplate(pDocTemplate); CMultiDocTemplate* pDocTemplate1;
pDocTemplate1 = new CMultiDocTemplate(
IDR_MENU1,
RUNTIME_CLASS(CDfdfmenuDoc),
RUNTIME_CLASS(CChildFrame), // custom MDI child frame
RUNTIME_CLASS(CTestEdit));
AddDocTemplate(pDocTemplate1);
//《〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈〈
然后切换视图,如下:
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
void CMainFrame::SwitchView(enum eview nview)
{
CView* pOldView=GetActiveView();
CView* pNewView=(CView*)GetDlgItem(nview);
if(pNewView==NULL)
{
switch(nview)
{
case TEST:
pNewView=(CView*)new CTestEdit;
break;
case TETET:
pNewView=(CView*)new CDfdfmenuView;
break;
}
CCreateContext context;
context.m_pCurrentDoc=pNewView->GetDocument();
pNewView->Create(NULL,NULL,WS_BORDER,CFrameWnd::rectDefault,
this,nview,&context);
pNewView->OnInitialUpdate();
}
SetActiveView(pNewView);
pNewView->ShowWindow(SW_SHOW);
if(pOldView!=NULL)
{
pOldView->ShowWindow(SW_HIDE);
pOldView->SetDlgCtrlID(pOldView->GetRuntimeClass()==RUNTIME_CLASS(CTestEdit)?TEST:TETET);
}
pNewView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
RecalcLayout();
}
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
可是菜单还是切换不过来,而且视图的刷新也有问题,麻烦你帮我看一下,好吗?如果方便,请留下邮箱,我把程序发给你,很急的,谢谢!
你有见VC将哪个菜单项移走吗
CMyView::OnActivate( UINT nState, CWnd* pWndOther, BOOL bMinimized )
{
if(窗口被激活)
GetParentFrame->OnUpdateFrameMenu(m_hmymenu);
}