导航
  • 主页
  • VC综合技术
  • 互联网技术
  • MFC AppLauncher
  • .NET 技术
  • 界面
  • 进程
  • 算法
  • 硬件/系统
  • 数据库
  • VC++技术资源

关于使用CToolTip的问题,如何在右键菜单弹出后,使鼠标移动到菜单的某一项上时弹出提示信息?

forfuture1 2004-04-06 02:49:02
我想使得在一个对话框中点击鼠标右键弹出菜单,然后当鼠标移动到菜单的某一项上时出现响应的提示信息框,这个怎么能够实现呢?
如何在对话框的按钮上出现提示信息,这个我已经实现了
...全文
141 点赞 收藏 14
写回复
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
forfuture1 2004-04-08
还是参照 http://www.codeproject.com/menu/menuitemtooltip.asp
将MenuToolTip.h中的OnMenuSelect函数更改如下:
inline
void CMenuToolTip::OnMenuSelect(UINT nItemID, UINT nFlags, HMENU hSubMenu)
{
if(nFlags & MF_POPUP
|| (nFlags == 0xFFFF && hSubMenu == NULL)) { // menu closing
ShowToolTip(FALSE);
}

if(!(nFlags & MF_POPUP)) {

// Set the position
SetToolTipPosition(hSubMenu, nItemID);

// Upodate the text of the tool tip
/* TCHAR szBuff[256];
szBuff[0] = 0;
int nRet = ::LoadString(m_hInstance, nItemID, szBuff, 256);
#if 0
for(int i = 0; i < nRet; i++)
{
if(szBuff[i] == _T('\n'))
{
szBuff[i] = 0;
break;
}
}
#endif

if(szBuff[0] != 0) {
UpdateToolTipText(szBuff);
}
else {
UpdateToolTipText(m_szDefault);
}
*/
UpdateToolTipText(show); //增加一个CString 型的show成员变量
ShowToolTip(TRUE);
}
}
然后将MenuItemToolTipDlg下的OnMenuSelect函数更改一下
void CMenuItemToolTipDlg::OnMenuSelect(UINT nItemID, UINT nFlags, HMENU hSubMenu)
{
if(nItemID==ID_test) myMenuToolTip.show="武汉";//针对特定ID的菜单显示不同的提示

myMenuToolTip.OnMenuSelect(nItemID, nFlags, hSubMenu);
myMenuToolTip.show="aBc";//默认的显示信息
CWnd::OnMenuSelect(nItemID, nFlags, hSubMenu);
}
回复
_foo 2004-04-07
OK,既然你试了就当我什么都没说过。
因为他在弹出tooltips时计算是直接取menuitemrect的值,而用GetMenuItemRect取弹出式菜单的菜单项区域时,只取了其宽度和高度,而没有取坐标。所以你得自己处理。

我的方法是:
1。给CMenuToolTip类添加一个公开变量POINT trackPoint;
在其构造函数中初始化为0
CMenuToolTip():m_hToolTip(0), m_hParent(0) {trackPoint.x=0;trackPoint.y=0;}
在其SetToolTipPosition函数中做一下修改:
// move position
::SendMessage(m_hToolTip, TTM_TRACKPOSITION, 0,(LPARAM)MAKELPARAM( trackPoint.x+rt.right + 10, trackPoint.y+rt.top + 2));

2。在你弹出右键菜单的时候先把菜单的位置传过去
void CMenuItemToolTipDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CMenu popMenu;
popMenu.LoadMenu(IDR_MENU1);
myMenuToolTip.trackPoint.x=point.x;
myMenuToolTip.trackPoint.y=point.y;
ClientToScreen(&point);
popMenu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN ,point.x,point.y,this);
myMenuToolTip.trackPoint.x=0;
myMenuToolTip.trackPoint.y=0;
CDialog::OnLButtonDown(nFlags, point);
}

回复
xuanzg 2004-04-07
重载菜单,重载 CWnd

在菜单初始化 建立 CWnd,自画函数中,更新CWnd 现实内容
回复
forfuture1 2004-04-07

我在添加的菜单的Properties->Prompt下加入了字符串后,是可以显示提示信息了,但是提示信息的位置不对,没有出现在弹出菜单的旁边而是固定在左上角,而且这样一来菜单的提示信息可以在程序中动态调整吗?因为我的菜单显示内容是动态的,要求提示信息也动态地做出调整
回复
forfuture1 2004-04-07
楼上的怎么知道我没有看呢????????????????

我下载下来看了的啊,但是那个好象只能针对主菜单。
我在对话框上响应了右键消息,加入了一个菜单,我是想当鼠标右键点击对话框的时候,我能够在弹出的右键菜单上移动鼠标到某一个菜单项的时候出现提示信息。

不知道大家都明白了我意思没有啊?
回复
_foo 2004-04-07
楼主,不是我说你。
问问题就应该有问问题的样,人家给你提供线索了你至少应该去看看,把源码下载下来看看效果,连看都没看就问,很不尊重人的。
回复
ylredsun 2004-04-07
mark
回复
forfuture1 2004-04-07
vcforever(霓裳羽衣):
这个好象只能针对主菜单,
能够在弹出的右键菜单上显示吗?
回复
grasshopperliu 2004-04-07
问一下楼主,你是怎么修改的“提示信息能够动态地变化呢?”
回复
forfuture1 2004-04-07
问题已经解决,送分!
回复
forfuture1 2004-04-07
To _foo(void):
谢谢了,但是如果我想使得出现的提示信息能够动态地变化呢?

现在它是根据Prompt中的值来显示提示信息的,这个值在程序中可以修改的吗?
回复
vcforever 2004-04-06
see this:
http://www.codeproject.com/menu/menuitemtooltip.asp
回复
forfuture1 2004-04-06
真的没有人知道吗?应该是可以实现的吧?
回复
forfuture1 2004-04-06
这个大家都没有做过吗?没人知道的吗?
回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……