工具栏按钮文本不显示求助:两种设置方案均无效
解决工具栏按钮文本不显示问题
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
相关产品推荐
相关产品推荐

