首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Win32 -按钮图像在工具栏中以错误的顺序出现。

Win32 -按钮图像在工具栏中以错误的顺序出现。
EN

Stack Overflow用户
提问于 2021-05-30 10:03:46
回答 1查看 264关注 0票数 1

我正在使用win32 api (在visual中)创建一个简单的油漆应用程序。我创建了一个工具栏,并为10个工具栏图像添加了一个位图(TBbuttons.bmp - size: 160x16像素- 4bpp索引格式),如下所示:

然而,按钮图像并没有像上面所示的那样以正确的顺序出现,而且有些图像的上方有一条黑线(这不是我想要的):

下面是我用来创建工具栏和按钮的代码:

代码语言:javascript
复制
    InitCommonControls();
    //create initial buttons
    TBBUTTON tbButtons[] =
    {
        { STD_FILENEW,  IDM_NEW, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0},
        { STD_FILEOPEN, IDM_OPEN, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0},
        { STD_FILESAVE, IDM_SAVE, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0}
    };

    //Create toolbar window
    HWND hToolBarWnd = CreateToolbarEx(hWndParent,
        WS_CHILD | WS_VISIBLE | CCS_ADJUSTABLE | TBSTYLE_TOOLTIPS,
        ID_TOOLBAR, sizeof(tbButtons) / sizeof(TBBUTTON), HINST_COMMCTRL,
        0, tbButtons, sizeof(tbButtons) / sizeof(TBBUTTON),
        BUTTON_WIDTH, BUTTON_HEIGHT, IMAGE_WIDTH, IMAGE_HEIGHT,
        sizeof(TBBUTTON));

    //Add more buttons
    TBBUTTON buttonsToAdd[] =
    {
        { 0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0, 0 },
        { STD_CUT,  IDM_CUT, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 },
        { STD_COPY, IDM_COPY, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 },
        { STD_PASTE, IDM_PASTE, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 },
        { STD_DELETE, IDM_DELETE, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 }
    };
    SendMessage(hToolBarWnd, TB_ADDBUTTONS, (WPARAM)sizeof(buttonsToAdd) / sizeof(TBBUTTON),
        (LPARAM)(LPTBBUTTON)&buttonsToAdd);

    //Create 10 more buttons to draw
    TBBUTTON userButtons[] =
    {   
        { 0, 0,                     TBSTATE_ENABLED, TBSTYLE_SEP, 0, 0 },
        { 0, IDM_ELLIPSE,           TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 },
        { 1, IDM_FILLED_ELLIPSE,    TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 },
        { 2, IDM_RECT,              TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 },
        { 3, IDM_FILLED_RECT,       TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 },
        { 4, IDM_CIRCLE,            TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 },
        { 5, IDM_FILLED_CIRCLE,     TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 },
        { 6, IDM_SQUARE,            TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 },
        { 7, IDM_FILLED_SQUARE,     TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 },
        { 8, IDM_LINE,              TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 },
        { 9, IDM_TEXT,              TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 }
    };

    TBADDBITMAP tbBitmap = { hInst, IDB_BITMAP1 };
    //Add bitmap to toolbar
    int idx = SendMessage(hToolBarWnd, TB_ADDBITMAP, (WPARAM)sizeof(tbBitmap) / sizeof(TBADDBITMAP),
        (LPARAM)(LPTBADDBITMAP)&tbBitmap);
    for (int i = 1; i <= 10; i++) {
        userButtons[i].iBitmap += idx;
    }

    //Add button to toolbar
    SendMessage(hToolBarWnd, TB_ADDBUTTONS, (WPARAM)sizeof(userButtons) / sizeof(TBBUTTON),
        (LPARAM)(LPTBBUTTON)&userButtons);

我仍然是win32 api的新手,我不知道这是什么原因。应用程序仍然运行良好,但按钮图像是完全错误的。我怎么才能解决这个问题?是因为我的代码或我创建的位图导致了这个问题吗?

编辑:我添加了一个新的位图(TBbitmap2.bmp)作为测试,并创建了另一个类似于第一个位图的位图(TBbitmap3.bmp)。在所有三个位图中,第一个产生了问题,另外两个位图工作得很好。这是指向所有三个位图的链接。问题仍然是,为什么第一个位图不断地产生问题,而另两个则有效?(它们具有相同的属性,只是大小不同)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-31 09:36:11

我尝试创建一个示例并使用位图。

它确实有一些奇怪的行为。在我第一次建造这个项目之后,它确实产生了你所说的问题。但在我重建后,问题消失了:

我认为位图在构建过程中没有正确加载,也许您可以尝试重新构建项目并运行程序。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67759920

复制
相关文章

相似问题

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