下面介绍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