对于 对话框程序 或者 activex 控件开发的时候, toolbar 按钮的 PROMPT 属性不会自动作为按钮的tooltip显示。
对于这种情况,通常有一些其他的解决方案, 比如 加入TTN_NEEDTEXT 消息映射。
另外对于ACTIVEX 来说,TTN_NEEDTEXT这个消息似乎也未能触发。
有一种简单的方法就是创建一个 CToolTipCtrl, 然后挂接到 CToolBar上。
在 h文件中定义变量:
CToolBarCtrl m_tb;
CToolTipCtrl m_tip;
在cpp文件中 OnCreate 函数中
if (!m_tb.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS) ||
!m_tb.LoadToolBar(IDR_MAINTOOLBAR))
{
TRACE0("Failed to create toolbar/n");
return -1; // fail to create
}
if(m_tip.Create(this)) {
CRect toolButtonRect;
CToolBarCtrl& toolBar = m_tb.GetToolBarCtrl();
int buttonCount = toolBar.GetButtonCount();
for (int i = 0; i < buttonCount; i ++) {
TBBUTTON btn;
if (toolBar.GetButton(i, &btn) && btn.fsStyle == TBSTYLE_BUTTON) {
m_tb.GetItemRect(i, &toolButtonRect);
m_tip.AddTool(&m_tb, btn.idCommand, toolButtonRect, btn.idCommand);
}
}
m_tb.GetToolBarCtrl().SetToolTips(&m_tip);
}
然后再更改ToolBar中每个按钮的 Prompt属性就可以作为tooltip显示了。
这种方法似乎比其他的方法好理解,也比较简单。