代码改变世界

Visual C++ 控制栏

2011-04-05 15:17  Clingingboy  阅读(792)  评论(0编辑  收藏  举报

 

3.1 如何创建工具栏

  1. CreateEx
  2. LoadToolBar
//创建工具栏窗口
if (!m_wndDemoToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | 
    WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | 
    CBRS_FLYBY | CBRS_SIZE_DYNAMIC))
{
    return -1;
}

//加载工具栏资源
if (!m_wndDemoToolBar.LoadToolBar(IDR_TOOLBAR))
{
    return -1;
}

 

3.2 如何设置工具栏的标题

 

//设置工具栏标题
CString strText = _T("");
strText.LoadString(AFX_IDS_APP_TITLE);
m_wndToolBar.SetWindowText(strText);

image

 

3.3 如何停靠工具栏

  1. EnableDocking
  2. DockBar
//停靠工具栏
m_wndDemoToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockBar(&m_wndToolBar, &m_wndDemoToolBar);

 

3.4 如何设置工具栏的位图

  1. SetBitmap
//设置位图
m_Bitmap.LoadBitmap(IDB_TOOLBAR);
m_wndDemoToolBar.SetBitmap((HBITMAP)m_Bitmap);

 

3.5 如何为工具栏按钮添加文本标签

SetButtonText方法

for(int n = 0; n < 3; n++)
{ 
    //获得工具栏按钮ID
    UINT nID = m_wndToolBar.GetItemID(n);

    CString strText = _T("");
    if(!strText.LoadString(nID)) 
    {
        continue;
    }
    int nIndex = strText.Find(_T('\n'));
    if(nIndex < 0) 
    {
        continue;
    }
    strText = strText.Right(strText.GetLength() - nIndex - 1);

    //设置工具栏按钮文本
    m_wndToolBar.SetButtonText(n, strText); 
}


image

 

3.6 如何为工具栏按钮添加下拉箭头

  1. CommandToIndex取得命令Index
  2. GetButtonStyle取得样式
  3. SetButtonStyle重新设置样式
//设置工具栏按钮风格
int nIndex = m_wndToolBar.CommandToIndex(ID_FILE_NEW);
UINT nStyle = m_wndToolBar.GetButtonStyle(nIndex);
nStyle |= TBSTYLE_DROPDOWN;
m_wndToolBar.SetButtonStyle(nIndex, nStyle);

 

3.7 如何为工具栏按钮设置热点图像

就是鼠标移动到Toolbar时改变的图片

//创建图像列表
if(!m_ImageList.Create(IDB_TOOLBAR, 16, 0, RGB(128,128,128)))
{
    return -1;
}

//设置工具栏图像列表
m_wndToolBar.GetToolBarCtrl().SetHotImageList(&m_ImageList);

 

3.8 如何启用或禁用工具栏的工具提示

SetBarStyle方法,与或CBRS_TOOLTIPS

void CMainFrame::OnEnableToolTips() 
{
    //获得工具栏风格
    DWORD dwStyle = m_wndToolBar.GetBarStyle();

    //启用或禁用工具提示
    if (dwStyle & CBRS_TOOLTIPS) 
    {
        dwStyle &= ~CBRS_TOOLTIPS;
    }
    else
    {
        dwStyle |= CBRS_TOOLTIPS;
    }
 
    //设置工具栏风格
    m_wndToolBar.SetBarStyle(dwStyle);
}

void CMainFrame::OnUpdateEnableToolTips(CCmdUI* pCmdUI) 
{
    //获得工具栏风格
    DWORD dwStyle = m_wndToolBar.GetBarStyle();

    if (dwStyle & CBRS_TOOLTIPS) 
    {
        pCmdUI->SetCheck(TRUE);
    }
    else
    {
        pCmdUI->SetCheck(FALSE);
    }
}

 

3.9 如何在工具栏中添加组合框

  1. SetButtonInfo创建一个空白区域
  2. GetItemRect获得空白区域大小和位置
  3. ComboBox的Create方法创建
BOOL CMainFrame::CreateComboBox(UINT nID)
{
    int nIndex = 0;
    CRect rect;

    //查找按钮
    while (m_wndToolBar.GetItemID(nIndex) != nID)
    {
        nIndex++;
    }

    //为组合框创建一个空白区域
    m_wndToolBar.SetButtonInfo(nIndex, nID, TBBS_SEPARATOR, 180);

    //获得空白区域大小和位置
    m_wndToolBar.GetItemRect(nIndex, &rect);

    //组合框大小和位置
    rect.top += 0;
    rect.bottom += 200;

    //在空白区域创建组合框
    if (!m_ComboBox.Create(WS_CHILD | WS_VISIBLE | CBS_AUTOHSCROLL | 
        CBS_DROPDOWNLIST | CBS_HASSTRINGS, rect, &m_wndToolBar, nID))
    {
        TRACE0("Failed to create combo-box\n");
        return FALSE;
    }

    //显示组合框
    m_ComboBox.ShowWindow(SW_SHOW);

    //在组合框中添加字符串
    m_ComboBox.AddString("500%");
    m_ComboBox.AddString("200%");
    m_ComboBox.AddString("150%");
    m_ComboBox.AddString("100%");
    m_ComboBox.AddString("75%");
    m_ComboBox.AddString("50%");
    m_ComboBox.AddString("25%");
    m_ComboBox.AddString("10%");
    m_ComboBox.SetCurSel(3);

    return TRUE;
}

 

3.10 如何创建状态栏

CStatusBar的应用

//创建状态栏窗口
if (!m_wndDemoStatusBar.Create(this))
{
    return -1;
}

//ID数组
UINT IDArray[2];
for (int n = 0; n < 2; n++)
{
    IDArray[n] = 10000 + n;
}

//设置状态栏指示器
m_wndDemoStatusBar.SetIndicators(IDArray, sizeof(IDArray) / sizeof(UINT));

//设置窗格宽度
m_wndDemoStatusBar.SetPaneInfo(0, IDArray[0], SBPS_NORMAL, 100);
m_wndDemoStatusBar.SetPaneInfo(1, IDArray[1], SBPS_STRETCH, 0);

//设置窗格文本
m_wndDemoStatusBar.SetPaneText(0, _T("状态栏:"));
m_wndDemoStatusBar.SetPaneText(1, _T(""));

 

3.11 如何在状态栏中添加进度条

字段m_Progress的设置

//创建状态栏窗口
if (!m_wndProgressStatusBar.Create(this))
{
    return -1;
}

//ID数组
UINT IDArray[2];
for (int n = 0; n < 2; n++)
{
    IDArray[n] = 10000 + n;
}

//设置状态栏指示器
m_wndProgressStatusBar.SetIndicators(IDArray, sizeof(IDArray) / sizeof(UINT));

//设置窗格宽度
m_wndProgressStatusBar.SetPaneInfo(0, IDArray[0], SBPS_NORMAL, 200);
m_wndProgressStatusBar.SetPaneInfo(1, IDArray[1], SBPS_STRETCH, 0);

//设置窗格文本
m_wndProgressStatusBar.SetPaneText(0, _T(""));
m_wndProgressStatusBar.SetPaneText(1, _T(""));

//设置进度条
m_wndProgressStatusBar.m_Progress.SetRange(0, 100);
m_wndProgressStatusBar.m_Progress.SetStep(10);
m_wndProgressStatusBar.m_Progress.SetPos(50);

 

3.12 如何显示或隐藏工具栏和状态栏

ShowControlBar可以用在CStatusBar和CToolBar

void CMainFrame::OnShowToolBar() 
{
    if (m_wndToolBar.GetStyle() & WS_VISIBLE)
    {
        //隐藏工具栏
        ShowControlBar(&m_wndToolBar, FALSE, FALSE);
    }
    else
    {
        //显示工具栏
        ShowControlBar(&m_wndToolBar, TRUE, FALSE);
    }
}

 

3.13 如何使用组合栏

  1. AddBar
//创建组合框
if (!m_ComboBox.Create(WS_CHILD | WS_VISIBLE | WS_VSCROLL | 
    CBS_DROPDOWN, CRect(0, 0, 100, 200), this, IDC_COMBOBOX))
{
    return FALSE;
}

//创建按钮
m_Button.Create(_T("确定"), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, 
    CRect(0, 0, 50, 20), this, IDC_TEST);

//创建Rebar
if (!m_wndReBar.Create(this))
{
    return -1;
}

//添加工具栏、组合框、按钮添加到Rebar中
m_wndReBar.AddBar(&m_wndToolBar);
m_wndReBar.AddBar(&m_ComboBox, NULL, NULL,  
    RBBS_NOGRIPPER | RBBS_BREAK);
m_wndReBar.AddBar(&m_Button, NULL, NULL, RBBS_NOGRIPPER);