MFC多文档应用程序常用知识点
1、修改左上角圆形按图标。可以将要显示的图标放在资源中加载,也可以将图标文件放在程序目录下加载。
CRectrt1;m_wndRibbonBar.GetClientRect(&rt1);CMFCRibbonApplicationButton*pAppButton=m_wndRibbonBar.GetApplicationButton();HBITMAPhBitmap=(HBITMAP)::LoadImage(NULL,CScale3DCGlobal::GetAppllicationPath()+_T("\\user\\admin.bmp"),IMAGE_BITMAP,0,0,//原始大小LR_DEFAULTCOLOR|LR_CREATEDIBSECTION|LR_LOADFROMFILE);pAppButton->SetImage(hBitmap);
以上代码放在MainFrame.cpp的OnCreate中执行。
2、在Ribbon中加载自己的控件
CRectrt(10,rt1.bottom+3,460,rt1.bottom+3+107);m_LedString.Create(_T("000000"),0,rt,&m_wndRibbonBar,IDC_LED1);m_LedString.SetStringPost(25,21);m_LedString.SetStringAmp(0.3);m_LedString.SetTip(_T("COM4:9600XK3190A9COM2:YH-5大屏幕"));m_LedString.SetUnit(_T("公斤"));
3、在一个按钮点击事件中创建新的视图
if(m_bIsScaleWeightView){m_pScaleWeightChildFrame->ActivateFrame();//激活已存在的视图m_pScaleWeightChildFrame->SetFocus();return;}m_pScaleWeightChildFrame=newCScale3DCChildFrame;CCreateContextcontext;context.m_pNewViewClass=RUNTIME_CLASS(CScale3DCScaleWeightView);if(!m_pScaleWeightChildFrame->LoadFrame(IDR_MAINFRAME,WS_OVERLAPPEDWINDOW|FWS_PREFIXTITLE,AfxGetMainWnd(),&context))return;m_pScaleWeightChildFrame->InitialUpdateFrame(NULL,TRUE);m_bIsScaleWeightView=TRUE;//防止重复创建视图
4、通过工具栏隐藏和显示面板
BOOLCScale3DCMainFrame::OnCloseDockingPane(CDockablePane*pWnd)//虚函数{//TODO:在此添加专用代码和/或调用基类m_bVideoShow=TRUE;m_bDataGridShow=TRUE;returnCMDIFrameWndEx::OnCloseDockingPane(pWnd);}//虚函数BOOLCScale3DCMainFrame::OnCloseMiniFrame(CPaneFrameWnd*pWnd){//TODO:在此添加专用代码和/或调用基类CWnd*pwnd=pWnd->GetPane();if(pwnd->IsKindOf(RUNTIME_CLASS(CTabbedPane)))//多个窗口{CTabbedPane*tabpane=(CTabbedPane*)pwnd;CMFCBaseTabCtrl*pTabWnd=tabpane->GetUnderlyingWindow();//关闭所有的面板for(inti=0;i<pTabWnd->GetTabsNum();i++){CDockablePane*pBar=DYNAMIC_DOWNCAST(CDockablePane,pTabWnd->GetTabWnd(i));if(pBar!=NULL){ASSERT_VALID(pBar);//将关闭消息加入该DockPane队列,等待完成本函数后关闭::PostMessageA(pBar->m_hWnd,WM_CLOSE,0,0);}}}else{//单个窗口CDockablePane*pane=(CDockablePane*)pwnd;if(pane->IsKindOf(RUNTIME_CLASS(CDockablePane))||pane->IsKindOf(RUNTIME_CLASS(CPane))&&pane->IsKindOf(RUNTIME_CLASS(CPaneFrameWnd))){//将关闭消息加入该DockPane队列,等待完成本函数后关闭::PostMessageA(pWnd->GetPane()->m_hWnd,WM_CLOSE,0,0);}}m_bVideoShow=TRUE;m_bDataGridShow=TRUE;returnTRUE;//returnCMDIFrameWndEx::OnCloseMiniFrame(pWnd);}voidCScale3DCMainFrame::OnButtonVideo(){if(!m_bVideoShow){m_bVideoShow=TRUE;m_wndVideoPanel.ShowPane(FALSE,FALSE,FALSE);}elseif(m_wndVideoPanel.GetSafeHwnd()){m_bVideoShow=FALSE;m_wndVideoPanel.ShowPane(TRUE,FALSE,TRUE);}else{BOOLbNameValid;CStringstrPropertiesWnd;bNameValid=strPropertiesWnd.LoadString(IDS_PROPERTIES_WND);ASSERT(bNameValid);if(!m_wndVideoPanel.Create(strPropertiesWnd,this,CRect(0,0,200,200),TRUE,ID_VIEW_PROPERTIESWND,WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS|WS_CLIPCHILDREN|CBRS_RIGHT|CBRS_FLOAT_MULTI)){TRACE("未能创建%s窗口\n",strPropertiesWnd);return;}m_wndVideoPanel.EnableDocking(CBRS_ALIGN_ANY);DockPane(&m_wndVideoPanel);m_bVideoShow=FALSE;}RecalcLayout();}voidCScale3DCMainFrame::OnButtonDatagrid(){//TODO:在此添加命令处理程序代码if(!m_bDataGridShow){m_bDataGridShow=TRUE;m_wndDataGridPanel.ShowPane(FALSE,FALSE,FALSE);}elseif(m_wndDataGridPanel.GetSafeHwnd()){m_bDataGridShow=FALSE;m_wndDataGridPanel.ShowPane(TRUE,FALSE,TRUE);}else{BOOLbNameValid;CStringstrPropertiesWnd;bNameValid=strPropertiesWnd.LoadString(IDS_OUTPUT_WND);ASSERT(bNameValid);if(!m_wndDataGridPanel.Create(strPropertiesWnd,this,CRect(0,0,200,200),TRUE,ID_VIEW_PROPERTIESWND,WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS|WS_CLIPCHILDREN|CBRS_RIGHT|CBRS_FLOAT_MULTI)){TRACE("未能创建%s窗口\n",strPropertiesWnd);return;}m_wndDataGridPanel.EnableDocking(CBRS_ALIGN_ANY);DockPane(&m_wndDataGridPanel);m_bDataGridShow=FALSE;}RecalcLayout();}
5、设置视图的标签标题文字
BOOLCScale3DCChildFrame::PreCreateWindow(CREATESTRUCT&cs){//TODO:在此处通过修改CREATESTRUCTcs来修改窗口类或样式cs.style&=~(LONG)FWS_ADDTOTITLE;if(!CMDIChildWndEx::PreCreateWindow(cs))returnFALSE;returnTRUE;}
voidCScale3DCScaleWeightView::OnInitialUpdate(){CFormView::OnInitialUpdate();CMDIChildWndEx*pFrame=(CMDIChildWndEx*)this->GetParentFrame();CScale3DCChildFrame*pMidFrame=(CScale3DCChildFrame*)pFrame;pMidFrame->SetWindowText(_T("称重数据区"));//TODO:在此添加专用代码和/或调用基类}
6、改变视图的背景颜色
BOOLCScale3DCScaleWeightView::OnEraseBkgnd(CDC*pDC){//TODO:在此添加消息处理程序代码和/或调用默认值CRectrt;GetClientRect(&rt);CBrushbrush;brush.CreateSolidBrush(RGB(255,255,255));CBrush*pOldBrush=pDC->SelectObject(&brush);pDC->FillRect(&rt,&brush);pDC->SelectObject(pOldBrush);returnTRUE;//returnCFormView::OnEraseBkgnd(pDC);}
7、在一个视图中创建另一个视图
CScale3DCMainFrame*pMainFrame=(CScale3DCMainFrame*)AfxGetMainWnd();CScale3DCMainControlPanel2*pPanel=&pMainFrame->m_wndMainControlPanel;pPanel->m_wndMainToolbarDlg->CreateScaleWeightView();
8、遍历主框架中的子框架
voidCScale3DCMainFrame::SearchAllMDIFrame(){CMDIFrameWnd*pFrame=(CMDIFrameWnd*)::AfxGetMainWnd();if(pFrame){CMDIChildWnd*pOldChildFrame=pFrame->MDIGetActive();CMDIChildWnd*pChildFrame=pOldChildFrame;if(pChildFrame){do{CStringstrCaption;pChildFrame->GetWindowText(strCaption);if(_T("主控界面区")==strCaption){CView*pView=pChildFrame->GetActiveView();//消息发向主控视图pView->SendMessage(WM_STARTSCALEWEIGHTVIEW,0,0);return;}pFrame->MDINext();pChildFrame=pFrame->MDIGetActive();}while(pChildFrame!=pOldChildFrame);}}}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。