MFC一一框架类当中的一些操作(改变标题,设置菜单栏,工具栏)

来源:互联网 发布:数据分析在职研究生 编辑:程序博客网 时间:2024/05/17 04:59

下面介绍MFC单文档编程中,改变相应的视图所涉及到的一些框架类的操作。

(1).修改应用程序标题,一般在框架类的PreCreateWindow函数中实现

PreCreateWindow一般在窗口创建之前执行的,它的主要任务是对所要创建的窗口进行一些风格或者其他方面的初始化或者说是设置

cs.style = WS_OVERLAPPED | WS_CAPTION | FWS_ADDTOTITLE| WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_MAXIMIZE | WS_SYSMENU;//去除原有的标题属性cs.style &= ~FWS_ADDTOTITLE;cs.style &= ~FWS_PREFIXTITLE;CString strValue;GetXML("Version","CurrentVersion",strValue.GetBuffer(MAX_PATH),MAX_PATH); //从配置文件中获取当前的版本信息m_strTitle.Format(_T("TestDoc %s"),strValue);//显示到标题栏上
//设置窗口大小为整个屏幕区域CRect cRect;SystemParametersInfo(SPI_GETWORKAREA,0,(PVOID)&cRect,0); cs.cy = cRect.Height();cs.cx = cRect.Width();cs.y = 0; cs.x = 0;
(2).设置菜单栏(CMenu),在OnCreate函数中实现

有时候,我们需要设置一些多样式的菜单栏,如菜单栏上有相应bitmap显示

首先,我们创建一个CImageList的成员变量,图像列表控制,用于指定Bitmap图中对应的索引号图像作为菜单栏中显示图标

HMENU CMainFrame::SetBitmapMenu(){static UINT toolbars[] ={IDR_TOOLBAR};CBitmap bitMap;bitMap.LoadBitmap(IDB_TOOLBAR);//加载图像列表的bitmap图片m_ImageList.Create(16, 16, ILC_COLORDDB|ILC_MASK, 1, 1);m_ImageList.Add(&bitMap, RGB(255,255,255));m_bitmapMenu.LoadMenu(IDR_MAINFRAME);//其中m_bitmapMenu成员是BCMenu(来源网络)类生成的对象m_bitmapMenu.LoadToolbars(toolbars, sizeof(toolbars)/sizeof(toolbars[0]));m_bitmapMenu.ModifyODMenu(NULL,ID_APP_ABOUT, &m_ImageList, 15);m_bitmapMenu.ModifyODMenu(NULL,ID_APP_HELP, &m_ImageList, 12);return(m_bitmapMenu.Detach());}
接下来将自己设计好的Menu设置到菜单栏上。

CMenu *pMenu =  new CMenu;HMENU hMenu = SetBitmapMenu();  pMenu = CMenu::FromHandle(hMenu);this->SetMenu(pMenu);this->UpdateWindow();
(3)设置工具栏(CToolBar),在OnCreate函数中实现
工具栏一般辅助菜单栏进行应用,将一些常用菜单选项设置为工具栏,方便使用

if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||!m_wndToolBar.LoadToolBar(IDR_TOOLBAR)){TRACE0("Failed to create toolbar\n");return -1;      // fail to create}///////////////////////////////////////////////////m_wndToolBar.SendMessage(TB_SETIMAGELIST, 0, (LPARAM)m_ImageList.m_hImageList);m_wndToolBar.SetButtonInfo(m_wndToolBar.CommandToIndex(ID_APP_ABOUT), ID_APP_ABOUT, TBBS_BUTTON, 15);//根据位图的index选取到对应的toolbar按钮上m_wndToolBar.SetButtonInfo(m_wndToolBar.CommandToIndex(ID_APP_HELP), ID_APP_HELP, TBBS_BUTTON, 12);m_wndToolBar.SetButtonInfo(m_wndToolBar.CommandToIndex(ID_CONFIGURE_STYLE), ID_CONFIGURE_STYLE, TBBS_BUTTON, 6);m_wndToolBar.GetToolBarCtrl().SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS);//设置工具栏的扩展风格DWORD dwStyle=m_wndToolBar.GetButtonStyle(m_wndToolBar.CommandToIndex(ID_CONFIGURE_STYLE));//获取按钮控件的风格dwStyle|=TBSTYLE_DROPDOWN;//设置下拉风格m_wndToolBar.SetButtonStyle(m_wndToolBar.CommandToIndex(ID_CONFIGURE_STYLE),dwStyle);
接下来调用UpdateToolBar()函数用于显示Toolbar

void CMainFrame::UpdateToolBar(BOOL bRecalc) //bRecalc用于指示是否重新计算尺寸{CRect rect;SIZE sizeButton,sizeImage;static char *gsTextTips[]={"Style","","Help","","About",""};if(bRecalc)//重新计算{m_sizeMax.cx = 0;m_sizeMax.cy = 0;for (int i=0;i<m_wndToolBar.GetCount();i++)//取得按钮控件最大尺寸{m_wndToolBar.SetButtonText(i,gsTextTips[i]);m_wndToolBar.GetItemRect(i,rect);m_sizeMax.cx = __max(rect.Size().cx, m_sizeMax.cx);m_sizeMax.cy = __max(rect.Size().cy, m_sizeMax.cy);}m_bTextTips=TRUE;}//设置按钮尺寸sizeButton.cx = m_bTextTips ? m_sizeMax.cx : 23;sizeButton.cy = m_bTextTips ? m_sizeMax.cy : 22;sizeImage.cx = 16;sizeImage.cy = 15;m_wndToolBar.SetSizes(sizeButton,sizeImage);//设置按钮大小以及其上位图大小ShowControlBar(&m_wndToolBar,TRUE,FALSE);//显示工具栏m_wndToolBar.RedrawWindow();//重绘工具栏}

另外分享几篇关于工具栏ToolBar介绍相关文章及实例,可以参考:

http://www.tiansin.com/thread-295.html

http://www.vcchar.com/thread-806-1-1.html

http://www.cppblog.com/wlwlxj/archive/2006/11/09/14897.html

阅读全文
0 0
原创粉丝点击