CToolTipCtrl如何能够在CComboBox控件上显示提示信息呢???

forfuture1 2004-05-14 03:45:09
我想在CComboBox控件上用CToolTipCtrl控件显示提示信息,如何做呢?已经能够在editbox控件上使用呢?但是同样的方法用在CComboBox控件上就不行。
成员变量:
CWnd * pSub[3];
CToolTipCtrl m_tip[3];

OnInitDialog()中:
pSub[0] = GetDlgItem(IDC_COMBO1);
m_tip[0].Create(pSub[0],TTS_ALWAYSTIP);
m_tip[0].AddTool(pSub[0]);

OnMouseMove中:
m_tip[0].UpdateTipText("abcd",pSub[0]);

PreTranslateMessage中:
if(m_tip[0].m_hWnd!=NULL)
m_tip[0].RelayEvent(pMsg);

上叙同样的方法对editbox控件可以有效,当对CComboBox控件无效,有谁知道原因啊??????
...全文
554 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhucde 2004-05-14
  • 打赏
  • 举报
回复
事实上刚才看了一下,
如果用我给你的方法的话,只要这样就行了:
CToolTipCtrl m_tooltip;


OnMouseMove中:
m_tooltip.Create(this);
m_tooltip.Activate(true);


m_tooltip.SetTipBkColor(RGB(0,144,18));
m_tooltip.SetTipTextColor(RGB(255,254,255));
m_tooltip.SetDelayTime(50);
m_tooltip.SetDelayTime(TTDT_AUTOPOP,8000);
m_tooltip.SetMaxTipWidth(290);

m_tooltip.Activate(true);
m_tooltip.Update();

m_tooltip.AddTool(GetDlgItem(IDC_RESULT),"可以关闭该对话框");

PreTranslateMessage中:
m_tooltip.RelayEvent(pMsg);

不需要那个rect(当然有也没有关系);
对于你所说的这个问题,如果combox的风格是DropDown那只能在边缘才有提示.
为什么呢?因为这个风格当你的鼠标在文本框里时就会处理另外的消息,这是combox自身所还,类似于editbox的EN_CHANGE一样,所以只能在边缘没有自带消息的地方CToolTip才有用,
包括边框和那个下拉框.

但如果设成DropList 就没有这个问题了
forfuture1 2004-05-14
  • 打赏
  • 举报
回复
还有大家说的方法都没有错,但是好象都是鼠标放在CComboBox控件的边缘的时候才会出现提示框,
我的CComboBox控件是可以自己写入数据的,即dropdown属性的,当我将鼠标放进CComboBox控件中的时候就没有提示框了。
能够实现当鼠标停留在CComboBox控件中一段时间后就能够出现提示框,而不是仅仅在边缘的时候才能出现这种提示框呢??
zhucde 2004-05-14
  • 打赏
  • 举报
回复
这个就太复杂了,
你得重载CToolTipCtrl类,
有空可以研究研究
forfuture1 2004-05-14
  • 打赏
  • 举报
回复
zhucde(【風間苍月】)(MVP) :
一下子回了这么多,谢谢了!

可以用的,我还想问一下,哪个m_tooltip上的文字可以更改字体的吗????默认的函数好象没有的,要自己写的吧?怎样改呢?
lixiaosan 2004-05-14
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/topic/3052/3052495.xml?temp=.7287866

我的方法绝对可行!而且不用你申请那么多CToolTipCtrl
//Dlg.h

CDlg : public CDialog
{
public:
CToolTipCtrl *m_ptip;
}

//Dlg.cpp

CDlg::~Dlg()
{
delete m_ptip;
m_ptip = NULL;
}
BOOL CDlg::OnInitDialog()
{
m_ptip = new CToolTipCtrl;
if(!m_ptip->Create(this))
{
TRACE("Unable To create ToolTip\n");
return TRUE;
}
m_ptip->AddTool( GetDlgItem(IDC_COMBO1), "提示条");
m_ptip->Activate(TRUE);

return TRUE;
}

BOOL CDlg::PreTranslateMessage(MSG* pMsg)
{
if (m_ptip != NULL)
m_ptip->RelayEvent(pMsg);

return CDialog::PreTranslateMessage(pMsg);
}
zhucde 2004-05-14
  • 打赏
  • 举报
回复
不好意思,上条作费

整理一下得:

CToolTipCtrl m_tooltip;
CRect rect;

OnInitDialog()中:
GetDlgItem(IDC_COMBO1)->GetClientRect(rect);//刚才多写了,需要

OnMouseMove中:
m_tooltip.Create(this);
m_tooltip.Activate(true);


m_tooltip.SetTipBkColor(RGB(0,144,18));
m_tooltip.SetTipTextColor(RGB(255,254,255));
m_tooltip.SetDelayTime(50);
m_tooltip.SetDelayTime(TTDT_AUTOPOP,8000);
m_tooltip.SetMaxTipWidth(290);

m_tooltip.Activate(true);
m_tooltip.Update();

m_tooltip.AddTool(GetDlgItem(IDC_COMBO1),"可以关闭该对话框",&rect);

PreTranslateMessage中:
m_tooltip.RelayEvent(pMsg);

已经测试过,是可以的!
zhucde 2004-05-14
  • 打赏
  • 举报
回复
修正:
m_tooltip.AddTool(GetDlgItem(IDC_COMBO1),"可以关闭该对话框",&rect);



OnInitDialog()中:
GetDlgItem(IDC_COMBO1)->GetClientRect(rect);//此句不再需要
zhucde 2004-05-14
  • 打赏
  • 举报
回复
你的写法可能不怎么好,CWnd * pSub[3];也没有初始化,肯定是warning

改成:
CToolTipCtrl m_tooltip;
CRect rect;

OnInitDialog()中:
GetDlgItem(IDC_COMBO1)->GetClientRect(rect);

OnMouseMove中:
m_tooltip.Create(this);
m_tooltip.Activate(true);


m_tooltip.SetTipBkColor(RGB(0,144,18));
m_tooltip.SetTipTextColor(RGB(255,254,255));
m_tooltip.SetDelayTime(50);
m_tooltip.SetDelayTime(TTDT_AUTOPOP,8000);
m_tooltip.SetMaxTipWidth(290);

m_tooltip.Activate(true);
m_tooltip.Update();

m_tooltip.AddTool(GetDlgItem(IDC_RESULT),"可以关闭该对话框",&rect);

PreTranslateMessage中:
m_tooltip.RelayEvent(pMsg);
zhucde 2004-05-14
  • 打赏
  • 举报
回复
OnInitDialog()中:
pSub[0] = GetDlgItem(IDC_COMBO1);
CRect rect;
pSub[0]->GetClientRect(rect);
m_tip[0].Create(pSub[0],TTS_ALWAYSTIP);
m_tip[0].AddTool(pSub[0],";adfjd",&rect);

16,547

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

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

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