CToolBar与CImageList合用,达到360的标题栏的效果

首先定义两个全局变量:
CToolBar m_toolBar;
CImageList m_imageList;
在oninitial函数在加上如下代码:

 //create toolbar
	m_toolBar.CreateEx(this,TBSTYLE_FLAT,WS_CHILD | WS_VISIBLE | CBRS_ALIGN_TOP);
//创建初始化CImageList对象
	m_imageList.Create(32,32,ILC_COLOR24 |ILC_MASK,1,1);
	m_imageList.Add(::LoadIcon(theApp.m_hInstance,MAKEINTRESOURCE(IDI_ICON1)));
	m_imageList.Add(theApp.LoadIconW(IDI_ICON2));
	m_imageList.Add(AfxGetApp()->LoadIconW(IDI_ICON3));
//设置ToolBar 为image
	m_toolBar.GetToolBarCtrl().SetImageList(&m_imageList);//鼠标没有移图标上的显示效果
	m_toolBar.GetToolBarCtrl().SetHotImageList(&m_imageList);//鼠标移图标上,显示效果

	static UINT arryBar[4];
	for(int i=0;i<4;i++)
	{
		if(i==1)
			arryBar[i]=ID_SEPARATOR;
		else
			arryBar[i]=WM_BARMSG+i;
	}
	m_toolBar.SetButtons(arryBar,4);//为button加上ID;

	m_toolBar.SetButtonText(0, _T("New"));
	m_toolBar.SetButtonText(2, _T("Save"));
	m_toolBar.SetButtonText(3, _T("Cut"));

	m_toolBar.SetSizes(CSize(40,40),CSize(32,32));//重新设置button大小
	m_toolBar.EnableToolTips(TRUE);

	RepositionBars(  0,   0xffff,   0);//跟随主窗口调整大小
可以得到如下效果图: 

添加图标响应函事件:

点击每个图标,都会向应用程序发送一个图标ID号的消息

所以添加消息响应,与一般的消息响应是一样的,也是要添加三处:

void CTest4Dlg::OnBtnBarID(UINT ID)

    afx_msg void OnBtnBarID(UINT ID);

    ON_COMMAND_RANGE(WM_BARMSG,WM_BARMSG+4,OnBtnBarID)

只不过,要注意一下,因为每个一个图标有一个ID,所以为所以图标添加响应,应该用:ON_COMMAND_RANGE





你可能感兴趣的:(CToolBar与CImageList合用,达到360的标题栏的效果)