现在的位置: 首页 > 综合 > 正文

在对话框中添加工具栏的两种方法

2013年03月14日 ⁄ 综合 ⁄ 共 3947字 ⁄ 字号 评论关闭
文章目录

方法①用ICO组成的工具栏

在用VC做信息管理系统时,我们有时会做基于对话框的程序,在对话框中添加工具栏用以这种方法,我们可以随心添加自己想要的Ico图标到工具栏上,不受添加一个Bmp图片时想要图标没有不想要的却很多,难以找到合适的Bmp图片以对应相应的工具栏按钮从而形象的表达按钮的功能.当然能过别的图片处理工具编辑Bmp图片后也能达到程序需求,但不如这种方法方便. 
   先找到自己想要的Ico图标,并将这些图标依次加到程序资源中,声明一个CToolBar m_wndToolBar工具栏变量和 CImageList img变量; 

    // 在程序中创建工具栏如下,其中各项参数可以参考MSDN: 
    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_TOOLBAR1)) 
    { 
    TRACE0(_T("创建工具条失败\n")); 
    } 
    m_wndToolBar.GetToolBarCtrl().SetButtonWidth(43, 70); 
  //  在ImageList中加上自己想要的图标,可以设置图标使鼠标指上去时和没指上去时的图标各异,大小不同. 
   // 比如我们用此可以把同一图标做成灰色和彩色,就可以得到想Windows工具栏那样的效果. 
   //  以下这是鼠标指上去时图标的显示效果: 
    Img.Create(22, 22, ILC_COLOR8|ILC_MASK,2,2); 
    Img.SetBkColor(::GetSysColor(COLOR_BTNFACE)); 
    img.Add(AfxGetApp()->LoadIcon(IDI_ICON1)); 
    img.Add(AfxGetApp()->LoadIcon(IDI_ICON2)); 
    img.Add(AfxGetApp()->LoadIcon(IDI_ICON3)); 
    img.Add(AfxGetApp()->LoadIcon(IDI_ICON4)); 
    m_wndToolBar.GetToolBarCtrl().SetHotImageList(&img); 
    img.Detach(); 


   // 以下这是鼠标没指上去时图标的显示效果: 
    img.Create(19, 19, ILC_COLOR8|ILC_MASK,8,8); 
    img.SetBkColor(::GetSysColor(COLOR_BTNFACE)); 
    img.Add(AfxGetApp()->LoadIcon(IDI_ICON1)); 
    img.Add(AfxGetApp()->LoadIcon(IDI_ICON2)); 
    img.Add(AfxGetApp()->LoadIcon(IDI_ICON3)); 
    img.Add(AfxGetApp()->LoadIcon(IDI_ICON4)); 
    m_wndToolBar.GetToolBarCtrl().SetImageList(&img); 
    img.Detach(); 


    //以下是在工具栏按钮上添加文字和设置分隔条: 
    m_wndToolBar.ModifyStyle(0,TBSTYLE_FLAT|CBRS_TOOLTIPS|TBBS_CHECKBOX ); 
    m_wndToolBar.SetButtons(NULL,6); 
    m_wndToolBar.SetButtonInfo(0, ID_FILE_NEW, TBSTYLE_BUTTON, 0); 
    m_wndToolBar.SetButtonText(0, "打开窗体"); 
    m_wndToolBar.SetButtonInfo(1, IDC_MSG_BUTTONSPLI, TBBS_SEPARATOR, 0); 
    m_wndToolBar.SetButtonInfo(2, ID_FILE_PRINT, TBSTYLE_BUTTON, 1); 
    m_wndToolBar.SetButtonText(2, "打印"); 
    m_wndToolBar.SetButtonInfo(3, ID_PRINT_VIEW, TBSTYLE_BUTTON, 2); 
    m_wndToolBar.SetButtonText(3, "打印预览"); 
    m_wndToolBar.SetButtonInfo(4, IDC_MSG_BUTTONSPLI2, TBBS_SEPARATOR, 0); 
    m_wndToolBar.SetButtonInfo(5, ID_APP_EXIT, TBSTYLE_BUTTON,3); 
    m_wndToolBar.SetButtonText(5, "退出");

    //得到按钮的大小,设置按钮的大小 
    CRect rectToolBar; 
    m_wndToolBar.GetItemRect(0, &rectToolBar); 
    m_wndToolBar.SetSizes(rectToolBar.Size(), CSize(20,20)); 

   以下代码让工具栏显示在对话框中: 

   RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);在对话框中添加工具栏浮动提示用以下函数实现 ,IDC_STRING1为字符串资源先在资源窗口中设置要显示的字符串: 
    BOOL CMainDlg::NotifyFunction( UINT id, NMHDR * pTTTStruct, LRESULT * pResult ) 
    { 
    pResult = NULL ; // Not Used 
    id = 0 ; // Not used 
    TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pTTTStruct; 
    UINT nID = pTTTStruct->idFrom; 
    switch ( nID) 
    { 
    case ID_FILE_NEW: 
    pTTT->lpszText = MAKEINTRESOURCE((LPCSTR)(IDC_STRING1)); 
    break ; 
    case ID_FILE_PRINT: 
    pTTT->lpszText = MAKEINTRESOURCE((LPCSTR)(IDC_STRING2)); 
    break ; 
    case ID_PRINT_VIEW: 
    pTTT->lpszText = MAKEINTRESOURCE((LPCSTR)(IDC_STRING3)); 
    break ; 
   case ID_APP_EXIT: 
    pTTT->lpszText = MAKEINTRESOURCE((LPCSTR)(IDC_STRING4)); 
    break ; 
    } 
    return(TRUE); 
    } 

    这种方法也可在文档视图的程序中实现漂亮的工具栏效果.希望以上方法能给大家一帮助

方法②工具栏资源

1 添加工具栏资源   

2 头文件中加CToolBar   m_wndToolBar   

3   在OnInitDialog()中加入类似以下代码:  

//   1创建工具栏   
if   (!m_wndToolBar.Create(this)   ||   
!m_wndToolBar.LoadToolBar(IDR_DLG_TOOLBAR))   
{   
TRACE0("Failed   to   create   dialog   toolbar\n");   
EndDialog(   IDCANCEL   );   
}   
    
//   2得出控件条大小.   
CRect   rcClientStart;   
CRect   rcClientNow;   
GetClientRect(rcClientStart);   
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,   AFX_IDW_CONTROLBAR_LAST,     
        0,   reposQuery,   rcClientNow);   
    
//   3放置控件条位置   
CPoint   ptOffset(rcClientNow.left   -   rcClientStart.left,   
rcClientNow.top   -   rcClientStart.top);     
    
CRect     rcChild;   
CWnd*   pwndChild   =   GetWindow(GW_CHILD);   
while   (pwndChild)   
{                                                                 
pwndChild->GetWindowRect(rcChild);   
ScreenToClient(rcChild);   
rcChild.OffsetRect(ptOffset);   
pwndChild->MoveWindow(rcChild,   FALSE);   
pwndChild   =   pwndChild->GetNextWindow();   
}   
    
//   4调整对话框尺寸   
CRect   rcWindow;   
GetWindowRect(rcWindow);   
rcWindow.right   +=   rcClientStart.Width()   -   rcClientNow.Width();   
rcWindow.bottom   +=   rcClientStart.Height()   -   rcClientNow.Height();   
MoveWindow(rcWindow,   FALSE);   
    
//   5控件条定位   
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,   AFX_IDW_CONTROLBAR_LAST,   0);   
    
//   6对框居中   
CenterWindow(); 

4   手工添加处理函数   

//afx_msg   void   OnBtnXXX();//CXXXDlg.h 文件中加声明   
//ON_COMMAND(ID_BTN_XXX,   OnDrawSquare)//CXXXDlg.cpp 文件中加宏   对应的工具条目的ID号
        // void   CXXXDlg::OnBtnXXX(){}//在CXXXDlg.cpp中加处理函数

抱歉!评论已关闭.