mfc下建立带有文字说明的32位真色彩工具栏

mfc下建立带有文字说明的32位真色彩工具栏

首先在CMainFrame类下添加公用变量:

      CToolBar     m_ToolBar;          //工具栏
      CImageList  m_ImgList;          //工具栏上的图片

然后在该类下添加对工具栏上的操作:

    BOOL LoadImageList();             //装载图片
    BOOL SetStyleToolbar();           //设置工具栏的样式

LoadImageList函数的实现:

 

BOOL CMainFrame::LoadImageList()
{
    int            i                    = 0;
    TCHAR        strPath[MAX_PATH]    = { 0 };
    TCHAR        strFull[MAX_PATH]    = { 0 };
    HBITMAP        hBitmap                = NULL;
    

    while(m_ImgList.Remove(0));   //移除列表中所有元素

    //取得图片完整路径
    GetCurrentDirectory(MAX_PATH, strPath);
    StrCat(strPath, _T("\\res\\"));
    
    for(i=0; i< m_iPicCount; ++i)
    {

        StrCpy(strFull, strPath);
        StrCat(strFull, (LPCWSTR)m_pLoadPicInfo[i].fileName.c_str());
       

        hBitmap = (HBITMAP)LoadImage(AfxGetResourceHandle(), strFull, IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR|LR_LOADFROMFILE);
        CBitmap        bmp;
        bmp.Attach(hBitmap);
        m_ImgList.Add(&bmp, RGB(0, 0, 0));
        bmp.DeleteObject();
    }
   
    return TRUE;
}
SetStyleToolbar()函数的实现:
BOOL CMainFrame::SetStyleToolbar()
{

    CToolBarCtrl&    tbc    = m_ToolBar.GetToolBarCtrl();
    while(tbc.DeleteButton(0));
    tbc.SetImageList(&m_ImgList);

    int        i            = 0;
    int        iButtons    = sizeof(tb) / sizeof(tb[0]);
    for(i = 0; i < iButtons; ++i)
    {
        tbc.AddButtons(1, &tb[i]);
    }

    for (int i = 0; i < m_iPicCount; i++)
    {
        m_ToolBar.SetButtonText(i, (LPCTSTR)m_pLoadPicInfo[i].descript.c_str());
    }

    //
    CRect temp;
    m_ToolBar.GetItemRect(0,&temp);
    m_ToolBar.GetToolBarCtrl().SetButtonSize(CSize(temp.Width(),
        temp.Height()));
  
    return TRUE;
}
接下来在OnCreate函数下创建工具栏:
 
//创建自定义工具栏
    m_ToolBar.CreateEx(this, 
        TBSTYLE_FLAT,
        WS_CHILD | WS_VISIBLE | CBRS_ALIGN_TOP);

    m_ImgList.Create(32, 32, ILC_COLOR32|ILC_MASK, 0, 0);
    LoadImageList();
    SetStyleToolbar();
 
创建好之后还得给工具栏上的按钮加上相应事件,要不然按钮会显示成灰色。由于按钮的ID都是自定义的,所以必须用MFC的ON_COMMAND_RANGE事件来响应按钮的消息。
首先在CMainFrame的头文件处声明消息映射函数afx_msg void OnToolBarButton(UINT nID);这个函数的作用就是通过不同的按钮ID做出不同的响应。然后在CMainFrame
的实现文件处在消息响应宏BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)和END_MESSAGE_MAP()之间加上消息映射:
           ON_COMMAND_RANGE(IDC_ADD, IDC_CAMERA, &CMainFrame::OnToolBarButton)
CMainFrame::OnToolBarButton函数的实现如下:
void CMainFrame::OnToolBarButton(UINT nID)
{
    if (nID < IDC_ADD || nID > IDC_FLAG)
    {
        return;
    }

    switch(nID)
    {
    case IDC_ADD:
        break;
    default:
        break;
    }
}

以下是用到的数据结构的定义:

 

struct BmpInfo
{
    wstring  fileName;               //文件名
    wstring  descript;               //工具栏图片的说明文字
};

//为系统管理员显示的ToolBar
static BmpInfo AdminToolBar[13] =
{
    {L"add.bmp",             L"添加设备"},
    {L"delete.bmp",          L"删除设备"},
    {L"home.bmp",            L"主视图"},
    {L"dataview.bmp",        L"数据视图"},
    {L"relativeView.bmp",    L"相对产气速率"},
    {L"absView.bmp",         L"绝对产气速率"},
    {L"analyseView.bmp",     L"数据分析"},
    {L"print.bmp",           L"打印"},
    {L"sample.bmp",          L"采样设置"},
    {L"flag.bmp",            L"标定设置"},
    {L"zoom in.bmp",        L"放大"},
    {L"zoom out.bmp",       L"缩小"},
    {L"camera.bmp",         L"保存图片"}
};



//为操作员和设备管理员显示的ToolBar
static BmpInfo OperatorToolBar[8] =
{
    {L"home.bmp",            L"主视图"},
    {L"dataview.bmp",        L"数据视图"},
    {L"relativeView.bmp",    L"相对产气速率"},
    {L"absView.bmp",         L"绝对产气速率"},
    {L"print.bmp",           L"打印"},
    {L"zoom in.bmp",         L"放大"},
    {L"zoom out.bmp",        L"缩小"},
    {L"camera.bmp",          L"保存图片"}
};

//为普通用户显示的ToolBar
static BmpInfo CommanToolBar[7] = 
{
    {L"home.bmp",            L"主视图"},
    {L"dataview.bmp",        L"数据视图"},
    {L"relativeView.bmp",    L"相对产气速率"},
    {L"absView.bmp",         L"绝对产气速率"},
    {L"zoom in.bmp",         L"放大"},
    {L"zoom out.bmp",        L"缩小"},
    {L"camera.bmp",          L"保存图片"}
};


//定义按钮的ID
#define IDC_ADD             4000
#define IDC_DELETE          4001
#define IDC_HOME            4002
#define IDC_DATAVIEW        4003
#define IDC_RELATIVEVIEW    4004
#define IDC_ABSVIEW         4005
#define IDC_ANALYSE         4006
#define IDC_PRINT           4007
#define IDC_SAMPLE          4008
#define IDC_FLAG            4009
#define IDC_ZOOMIN          4010
#define IDC_ZOOMOUT         4011
#define IDC_CAMERA          4012

static TBBUTTON tb[] =
{
    {  0,  IDC_ADD,                TBSTATE_ENABLED , TBSTYLE_BUTTON,    0, 0 },
    {  1,  IDC_DELETE,            TBSTATE_ENABLED , TBSTYLE_BUTTON,    0, 0 },
    {  2,  IDC_HOME,            TBSTATE_ENABLED , TBSTYLE_BUTTON,    0, 0 },
    {  3,  IDC_DATAVIEW,        TBSTATE_ENABLED , TBSTYLE_BUTTON,    0, 0 },
    {  4,  IDC_RELATIVEVIEW,    TBSTATE_ENABLED , TBSTYLE_BUTTON,    0, 0 },
    {  5,  IDC_ABSVIEW,            TBSTATE_ENABLED , TBSTYLE_BUTTON,    0, 0 },
    {  6,  IDC_ANALYSE,            TBSTATE_ENABLED , TBSTYLE_BUTTON,    0, 0 },
    {  7,  IDC_PRINT,            TBSTATE_ENABLED , TBSTYLE_BUTTON,    0, 0 },
    {  8,  IDC_SAMPLE,            TBSTATE_ENABLED , TBSTYLE_BUTTON,    0, 0 },
    {  9,  IDC_FLAG,            TBSTATE_ENABLED , TBSTYLE_BUTTON,    0, 0 },
    {  10, IDC_ZOOMIN,            TBSTATE_ENABLED , TBSTYLE_BUTTON,    0, 0 },
    {  11, IDC_ZOOMOUT,            TBSTATE_ENABLED , TBSTYLE_BUTTON,    0, 0 },
    {  12, IDC_CAMERA,            TBSTATE_ENABLED , TBSTYLE_BUTTON,    0, 0 }
};
 
编译运行之后,界面的显示效果如下:
mfc下建立带有文字说明的32位真色彩工具栏_第1张图片 

你可能感兴趣的:(mfc下建立带有文字说明的32位真色彩工具栏)