You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

工具栏按钮文本不显示求助:两种设置方案均无效

解决工具栏按钮文本不显示问题

1. 统一字符集编码

你混用了宽字符串(L"aaaaaaaButton Text")和ANSI版本的TBBUTTONINFOA,字符编码不匹配会导致文本无法渲染。推荐统一使用Unicode版本:

// 初始化按钮结构
TBBUTTON tbb[1];
ZeroMemory(tbb, sizeof(tbb));
tbb[0].iBitmap = 0;
tbb[0].idCommand = TB_TEST1;
tbb[0].fsState = TBSTATE_ENABLED;
tbb[0].fsStyle = TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE | TBSTYLE_LIST | TBSTYLE_FLAT;
tbb[0].dwData = 0;

// 先将字符串添加到工具栏的字符串列表,获取索引
int strIndex = SendMessage(hwndtb, TB_ADDSTRING, 0, (LPARAM)L"aaaaaaaButton Text");
tbb[0].iString = strIndex;

// 将按钮添加到工具栏
SendMessage(hwndtb, TB_ADDBUTTONS, 1, (LPARAM)tbb);

若使用ANSI字符集,需确保所有结构和字符串都用ANSI版本:

int strIndex = SendMessageA(hwndtb, TB_ADDSTRINGA, 0, (LPARAM)"aaaaaaaButton Text");
tbb[0].iString = strIndex;

2. 调整工具栏高度以容纳文本

TBSTYLE_LIST需要足够高度同时显示图标和文本,默认高度可能仅够显示图标,手动设置高度:

// 获取当前按钮尺寸
TBBUTTONSIZE tbSize;
tbSize.cx = 0;
tbSize.cy = 0;
SendMessage(hwndtb, TB_GETBUTTONSIZE, 0, (LPARAM)&tbSize);

// 增加高度以容纳文本(示例增加20像素,可按需调整)
tbSize.cy += 20;
SendMessage(hwndtb, TB_SETBUTTONSIZE, 0, (LPARAM)&tbSize);

3. 修正TB_SETBUTTONINFO的使用

确保使用匹配字符集的结构,同时指定完整的掩码(包含风格验证):

TBBUTTONINFOW tbInfo;
ZeroMemory(&tbInfo, sizeof(tbInfo));
tbInfo.cbSize = sizeof(TBBUTTONINFOW);
tbInfo.dwMask = TBIF_TEXT | TBIF_STYLE; // 同时验证按钮风格
tbInfo.pszText = L"Save As";
tbInfo.fsStyle = TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE | TBSTYLE_LIST | TBSTYLE_FLAT;

SendMessage(hwndtb, TB_SETBUTTONINFOW, (WPARAM)TB_TEST1, (LPARAM)&tbInfo);

4. 检查工具栏创建风格

创建工具栏时需确保包含必要风格,避免冲突:

HWND hwndtb = CreateWindowEx(0, TOOLBARCLASSNAME, NULL,
    WS_CHILD | WS_VISIBLE | TBSTYLE_FLAT | TBSTYLE_LIST,
    0, 0, 0, 0, hWndParent, (HMENU)ID_TOOLBAR, hInstance, NULL);

关键说明

TBBUTTON的iString字段应是工具栏字符串列表的索引,而非直接的字符串指针,用TB_ADDSTRING添加字符串后使用索引是更可靠的方式;若工具栏未关联图像列表,iBitmap=0会显示空白图标,但只要高度足够,文本仍会正常显示。

内容的提问来源于stack exchange,提问作者anaconda57

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 10:33:37