在对话框中利用CToolBar类添加工具条的方法

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;
}

 

posted on 2015-05-01 02:50  cpp520  阅读(1042)  评论(0编辑  收藏  举报

导航