Dialog中的toolbar问题(在线等待)

hxzb7215191 2005-03-24 05:26:41
我建了一个Dailog风格的工程

加入了一个工具栏

我为这一些toolbar里的属性里Prompt中增加了内容。

但是将鼠标移上去没有提示信息

我填写的内容是"全屏\n全屏"
...全文
86 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hxzb7215191 2005-03-28
  • 打赏
  • 举报
回复
3LegsCat(三脚猫) 的确是这样做的。

1.加入一个消息处理函数定义:
afx_msg BOOL OnToolTipText( UINT id, NMHDR * pNMHDR, LRESULT * pResult );
2.在消息应射定义里把两个消息映射到这个处理函数里。
ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0, 0xFFFF, OnToolTipText)
ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA, 0, 0xFFFF, OnToolTipText)
3.写这样的消息处理函数的实现:

BOOL CDialogMain::OnToolTipText( UINT id, NMHDR * pNMHDR, LRESULT * pResult )
{
ASSERT(pNMHDR->code == TTN_NEEDTEXTA || pNMHDR->code == TTN_NEEDTEXTW);

// allow top level routing frame to handle the message
if (GetRoutingFrame() != NULL)
return FALSE;

// need to handle both ANSI and UNICODE versions of the message
TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR;
TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;
TCHAR szFullText[256];
CString strTipText;
UINT_PTR nID = (UINT_PTR)pNMHDR->idFrom;
if (pNMHDR->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND) ||
pNMHDR->code == TTN_NEEDTEXTW && (pTTTW->uFlags & TTF_IDISHWND))
{
// idFrom is actually the HWND of the tool
nID = ((UINT_PTR)(WORD)::GetDlgCtrlID((HWND)nID));
}

if (nID != 0) // will be zero on a separator
{
AfxLoadString((UINT)nID, szFullText);
// this is the command id, not the button index
AfxExtractSubString(strTipText, szFullText, 1, '\n');
}
#ifndef _UNICODE
if (pNMHDR->code == TTN_NEEDTEXTA)
lstrcpyn(pTTTA->szText, strTipText,
(sizeof(pTTTA->szText)/sizeof(pTTTA->szText[0])));
else
{
int n = MultiByteToWideChar(CP_ACP, 0, strTipText, -1, pTTTW->szText,
sizeof(pTTTW->szText)/sizeof(pTTTW->szText[0]));
if (n > 0)
pTTTW->szText[n-1] = 0;
}
#else
if (pNMHDR->code == TTN_NEEDTEXTA)
{
int n = WideCharToMultiByte(CP_ACP, 0, strTipText, -1,
pTTTA->szText, sizeof(pTTTA->szText)/sizeof(pTTTA->szText[0]),
NULL, NULL);
if (n > 0)
pTTTA->szText[n-1] = 0;
}
else
lstrcpyn(pTTTW->szText, strTipText,
(sizeof(pTTTW->szText)/sizeof(pTTTW->szText[0])));
#endif
*pResult = 0;

// bring the tooltip window above other popup windows
::SetWindowPos(pNMHDR->hwndFrom, HWND_TOP, 0, 0, 0, 0,
SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE);

return TRUE; // message was handled
}
就可以搞定了。
主要就是这两个消息,在Dialog里没有被处理过。
sjcode 2005-03-26
  • 打赏
  • 举报
回复
http://cdlist.myrice.com/note/doc2k09/Box_tb.htm

这个对你,或许有用,good luck
hxzb7215191 2005-03-26
  • 打赏
  • 举报
回复
那要如何去做呢?
3LegsCat 2005-03-26
  • 打赏
  • 举报
回复
参见MSDN上的一个例子mfc_general_dlgcbr32.exe
我自己实现过
ON_NOTIFY_EX(TTN_NEEDTEXT, OnToolTipText)
BOOL OnToolTipText( UINT id, NMHDR * pNMHDR, LRESULT * pResult )
{
//增加工具条提示
TOOLTIPTEXT * pT = (TOOLTIPTEXT *)pNMHDR;
CString strTipText;
UINT nID = (UINT)(pNMHDR->idFrom);
strTipText = m_ToolBarNote[nID - ID_FIRST];

int i;
for(i = 0; i < strTipText.GetLength(); i++)
{
pT->szText[i] = strTipText.GetAt(i);
}
pT->szText[i] = 0;
*pResult = 0;
return TRUE;
}
hxzb7215191 2005-03-26
  • 打赏
  • 举报
回复
看过了,用不了。
fanqing 2005-03-25
  • 打赏
  • 举报
回复
对话框不同于sdi和mdi,他有一个消息没有发送导致菜单\工具条\任务栏在对话框中无法处理界面.

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧