Win32编程之ToolBar的使用

今天使用win32编程创建ToolBar, 由于对这块不熟, 所以今天特意写一下,怕以后忘了, 也没啥技术含量, 大牛飘过~~~

创建ToolBar可以使用CreateToolBar和CreateWindowEx, 由于微软不提倡使用CreateToolBar, 所以这里使用的是后者。

用CreateWindowEx需要指定窗口类为TOOLBARCLASSNAME,这里就直接上代码了

(1)使用commctl中的标准位图

HWND CreateAToolBar(HWND hwnDlg)  // hwnDlg为窗口的句柄

{

  const int BUTTONNUMS = 2;      //工具栏上按钮的数目
     TBBUTTON tbb[2];                    //按钮 
     ZeroMemory(tbb, sizeof(tbb));  
     tbb[0].iBitmap = STD_FILENEW;  
     tbb[0].fsState = TBSTATE_ENABLED;  
     tbb[0].fsStyle = TBSTYLE_BUTTON;  
     tbb[1].iBitmap = STD_REDOW;  
     tbb[1].fsState = TBSTATE_ENABLED;  
     tbb[1].fsStyle = TBSTYLE_BUTTON; 

     //位图,commctl中的标准位图  
    TBADDBITMAP tbBitmap;  
    tbBitmap.hInst = HINST_COMMCTRL;  
    tbBitmap.nID = IDB_STD_SMALL_COLOR;  
 
    RECT windowRect;  
    GetWindowRect(hwndParent,&windowRect);  
    hwndToolbar = CreateWindowEx(0L,TOOLBARCLASSNAME,NULL,WS_CHILD|WS_VISIBLE|WS_BORDER,0,0,0,0,  
        hwndParent,(HMENU)ID_TOOLBAR,hInst,NULL);  
    //将位图添加到工具栏  
    SendMessage(hwndToolbar,TB_ADDBITMAP,0,(LPARAM)&tbBitmap);  
    //计算工具栏大小  
    SendMessage(hwndToolbar,TB_BUTTONSTRUCTSIZE,(WPARAM)sizeof(TBBUTTON),0);  
    //添加按钮到工具栏  
    SendMessage(hwndToolbar,TB_ADDBUTTONS,(WPARAM)BUTTONNUMS,(LPARAM)&tbb);  
 
    return hwndToolbar;

}

(2)  另一种就是使用自己定位的位图(这里我是一个一个位图添加的, 不是一个位图里面包含很多的图片)

BOOL CreateAToolBar(HWND hwnDlg)
{

    HWND hToolBar = CreateWindowEx(NULL, TOOLBARCLASSNAME, " ", WS_CHILD | WS_VISIBLE | TBSTYLE_TOOLTIPS,
                        0, 0, 0, 0, hwnDlg, /*NULL*/(HMENU)1111, hInst, NULL);   //  创建工具栏
    TBBUTTON tbb[13];
    ZeroMemory(tbb, sizeof(tbb));

    HIMAGELIST hInmageList = ImageList_Create(32, 32, ILC_COLOR24/*ILC_COLOR16 | ILC_MASK*/, 13, 0);  // 创阿位图列表, 13表示我创建了13个这样的

    int iBitmap[13] = {0};
    WORD Id[13] = { IDB_FileManage, IDB_ScreenControl, IDB_Cmd, IDB_KeyRecord, IDB_ProcessManage, IDB_Regedit, IDB_ServiceManage,
        IDB_WindowsManage, IDB_AudioMomonitor, IDB_DownLoad, IDB_FlushIP, IDB_ParameterSet,IDB_ProduceClient };

    for (int i = 0; i < 13; i++)
    {
        iBitmap[i] = ImageList_Add(hInmageList, LoadBitmap(hInst, MAKEINTRESOURCE(Id[i])), 0);
    }
    
    SendMessage(hToolBar, TB_SETIMAGELIST, 0, (LPARAM)hInmageList);   //将位图添加到工具栏

    TCHAR *szBitMAp[] = { "文件管理", "屏幕监控", "超级终端", "键盘记录", "进程管理", "注册表管理", "服务管理", "窗口管理",
        "音视频监控","下载管理","刷新IP", "参数设置", "创建客户"};
    for (int j = 0; j < 13; j++)
    {
        tbb[j].iBitmap = MAKELONG(iBitmap[j], 0);
        tbb[j].fsState = TBSTATE_ENABLED;
        tbb[j].fsStyle = TBSTYLE_BUTTON;
        tbb[j].iString = (INT_PTR)szBitMAp[j];
    }


    SendMessage(hToolBar, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0);   //计算工具栏大小
    SendMessage(hToolBar, TB_ADDBUTTONS, sizeof(tbb) / sizeof(TBBUTTON), (LPARAM)&tbb);     //添加按钮到工具栏 
    //SendMessage(hToolBar, TB_SETBUTTONSIZE, 0, (LPARAM)MAKELONG(60, 60));  
    SendMessage(hToolBar, TB_AUTOSIZE, 0, 0);    //调整工具栏大小

    //ShowWindow(hToolBar, TRUE);
    
    return TRUE;
}

 

posted @ 2016-02-16 11:35  SmallDouble  阅读(2271)  评论(0编辑  收藏  举报