首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++ / CreateToolbarEx问题工具栏无法显示所有位图

C++ / CreateToolbarEx问题工具栏无法显示所有位图
EN

Stack Overflow用户
提问于 2020-12-13 13:35:05
回答 2查看 65关注 0票数 0

只渲染4张带有sperator的图像,而不是整个9张带有2个分隔符的图像,不知道是什么原因导致的代码看起来很棒。

这是我的代码。

代码语言:javascript
复制
void CreateMacroToolBar(HWND hDlg)
{
    // Load and register Toolbar control class
    INITCOMMONCONTROLSEX iccx;
    iccx.dwSize = sizeof(INITCOMMONCONTROLSEX);
    iccx.dwICC = ICC_BAR_CLASSES;
    if (!InitCommonControlsEx(&iccx))
        return;

    const DWORD buttonStyles = TBSTYLE_AUTOSIZE | TBSTYLE_BUTTON;

    const DWORD TOOLBAR_STYLE = WS_CHILD | TBSTYLE_FLAT | TBSTYLE_TOOLTIPS |
        WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_VISIBLE |
        CCS_NOPARENTALIGN |
        CCS_NORESIZE |
        CCS_NODIVIDER;

    // Declare and initialize local constants.
    const int numButtons = 7;
    const int numButtonsTotal = 9;

    TBBUTTON tbButtons[numButtonsTotal] =
    {
        { 0,             IDM_BUTTON_MACRO_RECORD, TBSTATE_ENABLED, buttonStyles, {0}, 0, (INT_PTR)(L"Record a macro" },
        { 1,             IDM_BUTTON_MACRO_STOP,   0,               buttonStyles, {0}, 0, (INT_PTR)(L"Stop recording" },
        { 2,             IDM_BUTTON_MACRO_PLAY,   0,               buttonStyles, {0}, 0, (INT_PTR)(L"Play macro" },
        { I_IMAGENONE,   -1,                      0,               TBSTYLE_SEP,  {0}, 0, -1},  //SEPERATOR
        { 3,             IDM_BUTTON_MACRO_ERASE,  0,               buttonStyles, {0}, 0, (INT_PTR)(L"Erase the macro" },
        { 4,             IDM_BUTTON_MACRO_LOAD,   0,               buttonStyles, {0}, 0, (INT_PTR)(L"Load a macro" },
        { 5,             IDM_BUTTON_MACRO_SAVE,   0,               buttonStyles, {0}, 0, (INT_PTR)(L"Save a macro" },
        { I_IMAGENONE,   -1,                      0,               TBSTYLE_SEP,  {0}, 0, -1},  //SEPERATOR
        { 6,             IDM_MACRO_ABOUTBOX,      TBSTATE_ENABLED, buttonStyles, {0}, 0, (INT_PTR)L"About macro options" }
    };
    
    RECT         rect;
    HWND         hwndTB;

    hwndTB = CreateToolbarEx (GetDlgItem(hDlg, IDC_STATIC_TOOLBAR_MACRO), //Apply toolbar to static text.
            TOOLBAR_STYLE,                   //Toolbar style.
            ID_MACRO_TOOLBAR,                //Toolbar ID.
            numButtons,                      //Button of buttons (bmp's) (without seperators)
            hDLLModule,                      //Current application instance (where the bitmap is)
            IDR_TOOLBAR_MACRO,               //Bitmap ID.
            tbButtons,                       //Buttons struct
            numButtonsTotal,                 //Total buttons (with seperators)
            16, 15, 16, 15,                  //Button sizes and Bitmap sizes.
            sizeof(TBBUTTON) );

    if (!hwndTB) {
        printf("Loading Macros failed!\n");
        return;
    }

    //SendMessage(hwndTB, TB_AUTOSIZE, 0, 0); //Auto size to show more toolbars TODO: [DOESN'T WORK]
    SendMessage(hwndTB, TB_SETMAXTEXTROWS, 0, 0); //Removes the label from Toolbar and adds Tooltips.
}

我的IDE设置

我的工具栏位图拼接图像看起来不错

这是位图文件.bmp中位图的样子(不是白色区域,没有考虑到我刚刚做了一个糟糕的打印屏幕)

下面是静态文本的呈现方式

下面是呈现工具条的静态文本属性的外观

当加载时成品看起来像这样,注意它只加载了前4个图标+1个分隔符,总共5个

而不是分隔符所需的9,或者如果仅加载图像,则为7

EN

回答 2

Stack Overflow用户

发布于 2020-12-13 13:59:32

工具栏的高度由按钮的高度决定,并且默认情况下,工具栏的宽度与父窗口的工作区的宽度相同。在本例中,您已经传递了GetDlgItem(hDlg, IDC_STATIC_TOOLBAR_MACRO),这很可能是静态标签。这会将工具栏的宽度限制为该静态控件的宽度。我相信如果您将hDlg作为第一个参数传递给CreateToolbarEx,它将解决您的问题。或者创建一个足够大的新窗口来包含它,这个窗口的父级是hDlg

票数 0
EN

Stack Overflow用户

发布于 2020-12-13 17:48:14

从所有按钮中删除这两种样式可以解决这个问题。

代码语言:javascript
复制
CCS_NOPARENTALIGN | CCS_NORESIZE
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65272670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档