在MFC的CView中创建工具条(CToolBar)

第一种方式是在此view的对应doc模板CFrameWnd子类的OnCreate函数中添加创建代码
由于mdi的模板多个view可能是公用一个CFrameWnd子类。此方法控制不太灵活但是简单

第二种方式即在view的OnCreate函数中创建

int CXxxView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{    
	if (CView::OnCreate(lpCreateStruct) == -1)        
		return -1;    
		
		// 创建工具栏    
		CMDIChildWnd * pFrame = (CMDIChildWnd*)GetParentFrame();    
		if (!m_wndToolBar.Create(pFrame) || !m_wndToolBar.LoadToolBar(IDR_TOOLBAR)) 
		{        
			TRACE0("Failed to create doc view ");       
			 return -1;      // fail to create    
		 }    // 其他工具栏的或者dockable窗口的创建  
		 
		 // 停靠设置    
		 m_wndToolBar.EnableDocking(CBRS_ALIGN_TOP);    
		 pFrame->EnableDocking(CBRS_ALIGN_ANY);    
		 pFrame->DockControlBar(&m_wndToolBar);        
		 return 0;
} 

这种方式控制较为灵活每个view的工具栏可以独立控制
第三种方式即在view中再创建一个CFrameWnd的窗口然后贴在view上
首先编写继承于CFrameWnd的一个子类例如CDockFrame,然后实现以下方法

virtual BOOL OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{   
	 //在此Frame中增加默认的视图模板并创建    
	 CCreateContext context;    
	 pContext = &context;    
	 pContext->m_pNewViewClass = RUNTIME_CLASS(CHtmlView); 
	 // CHtmlView可以替换为其它继承于CView的类但是不能是CView本身    
	 CView *pView = CreateView(pContext);    
	 SetActiveView(pView);    
	 // 如果需要拆分窗口可创建一个分割的CSplitterWnd窗口    
	 //if (!m_wndSplit.CreateStatic(this, 2, 1))   
	  //{    
	  //    TRACE0("Failed to CreateStaticSplitter ");    
	  //    return FALSE;    
	  //}    
	  //    
	  //m_wndSplit.CreateView(0, 0, RUNTIME_CLASS(CHtmlView), CSize(600, 400), pContext);    
	  //m_wndSplit.CreateView(1, 0, RUNTIME_CLASS(CDocListView), CSize(600, 100), pContext);    
 	 return TRUE;
  }
  int OnCreate(LPCREATESTRUCT lpCreateStruct)
  {    
 	 	if (CFrameWnd::OnCreate(lpCreateStruct) == -1)        
  			return -1;   
  	 	// 和第一种方法一样创建各种工具栏   
    	if (!m_wndToolBar.CreateEx(this) || !m_wndToolBar.SetButtons(lpBtn, 5))
    	{       
    	 	return -1;   
    	}   
   }

然后在view的OnCreate函数中创建此CFrameWnd窗口m_pDockFrame= new CDockFrame();m_pDocFrame->Create(NULL, _T(“doc”), WS_CHILD|WS_VISIBLE, m_clienRect, this);如果在视图中创建已我的实践此CFrameWnd的指针不用自己delete,不然会出错
此方法比较麻烦,层次不够明晰,不过可以用在某些比较特殊的情况如View不是程序模板创建本身也是贴在其它的窗口如果需要在对话框上实现工具栏浮动停靠此方法也是可行的只不过创建的CFrameWnd窗口父窗口替换为对话框。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值