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

下面介绍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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值