标签:
UINT BASED_CODE DockTool[]={ID_NEWGAME,ID_SAVE,ID_OPEN,ID_SEPARATOR,ID_COPYFEN,ID_PASTEFEN,ID_SEPARATOR,IDC_ABORT,IDC_ABORT,ID_SEPARATOR,ID_SOUNDEFECT}; // CChnChessDlg 消息处理程序 BOOL CChnChessDlg::DrawToolBar(UINT nResID,CSize size,DWORD dwStyle){ //创建工具栏 BOOL bRt = m_wndToolBar.Create(this,dwStyle); if(bRt) { /* 创建自定义位图的工具栏初始化工作 ***************************************************/ //定义工具栏上的按钮的所对应的标识 //加载工具栏要用的位图 CBitmap bitmap; bitmap.LoadBitmapW(nResID); //建立工具栏中的图片列表 static CImageList m_ilToolBar; m_ilToolBar.Create(size.cx,size.cy,ILC_COLOR32,0,0);//以多少像素来切割图片 m_ilToolBar.Add(&bitmap,(CBitmap*)NULL); //设置工具栏按钮图片 m_wndToolBar.GetToolBarCtrl().SetImageList(&m_ilToolBar); //设置工具栏的按钮大小,和按钮中位图大小(注意: 按钮大小必须大于按钮中位图大小) SIZE sbutton; sbutton.cx= size.cx + 7; sbutton.cy=size.cy + 6; m_wndToolBar.SetSizes(sbutton,size); //设置工具栏上按钮的所对应的标识,和按钮个数 UINT nButtonNum = sizeof(DockTool)/sizeof(UINT); m_wndToolBar.SetButtons(DockTool,nButtonNum); TRACE(_T("\r\n sizeof(DockTool)/sizeof(UINT) = %d"),sizeof(DockTool)/sizeof(UINT)); /* 前期准备工作 *************************************************************************/ CRect rcClientOld; CRect rcClientNew; // 用 rcClientOld 获取客户区间 GetClientRect(rcClientOld); // 用 rcClientNew 获得除了 ToolBar 区的对话框客户区 RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0,reposQuery,rcClientNew); //获得在加入 ToolBar 后控件应该移动的偏移偏移量 CPoint ptOffset(rcClientNew.left-rcClientOld.left,rcClientNew.top-rcClientOld.top); /* 重新设置对话框的窗体区间 *************************************************************/ //得到对话框窗体区间 CRect rcWindow; GetWindowRect(rcWindow); //修改对话框宽度和高度,即让对话框添加上 ToolBar 的高度和适应 ToolBar 的高度 rcWindow.right += rcClientOld.Width() - rcClientNew.Width(); rcWindow.bottom += rcClientOld.Height() - rcClientNew.Height(); //移动对话框 MoveWindow(rcWindow,FALSE); /* 调整控件位置 *************************************************************************/ CRect rcChild; //获得窗口控件 CWnd* pwndChild = GetWindow(GW_CHILD); //遍历控件 while(pwndChild) { //获得控件区间 pwndChild->GetWindowRect(rcChild); //将屏幕坐标转换为客户区坐标 ScreenToClient(rcChild); //将控件移动相对位置 rcChild.OffsetRect(ptOffset); //移动控件 pwndChild->MoveWindow(rcChild,FALSE); //获得下个控件句柄 pwndChild = pwndChild->GetNextWindow(); } //显示 ToolBar RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0); } return bRt; }
标签:
原文地址:http://www.cnblogs.com/cpp520/p/4470258.html