重绘标题栏,如何使用tooltip控件显示最大化最小化关闭按钮的文本提示? 在正常的情况下,当我们将鼠标放置到最大化最小化关闭按钮上时,会显示按钮的tip框。在我重绘标题栏的处理中,如何使用tooltip控件实现上面的功能?请大家帮忙看一下! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我重绘的是对话框的标题栏,好像是在OnNcMouseMove消息响应函数中作相关的处理,尝试了一下没搞定,大家看看给点建议!谢谢了! 我重绘的是对话框的标题栏,好像是在OnNcMouseMove消息响应函数中作相关的处理,尝试了一下没搞定,大家看看给点建议!谢谢了! OnNcHitTest返回HTMINBUTTON 表示在最小化按钮上返回HTMAXBUTTON 表示在最大化按钮上返回HTSYSMENU 表示在关闭按钮上 呵呵~我这边能判断是否在这几个按钮上,就是想知道tooltip控件具体怎么处理 HitTest在鼠标点击的时候,才能响应,而实际上,当我们不点击只是把鼠标放到最大化最小化按钮上时,就会显示tip信息! LRESULT CColorTitleDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam){ // TODO: 在此添加专用代码和/或调用基类 if (message == WM_NCHITTEST) { LRESULT lRet = CDialog::WindowProc(message, wParam, lParam); //屏蔽默认窗体的最大最小关闭按钮以及系统菜单(自绘后的最大最小关闭按钮的判断由对应的按钮窗口坐标来判断) if(lRet==HTZOOM || lRet == HTMINBUTTON || lRet == HTCLOSE || lRet==HTSYSMENU) return HTCAPTION;//视为标题栏动作。 else return lRet; } //这里避免窗口重绘系统按钮(最大化最小化关闭) //这两条消息是在xp sp2后加的: WM_NCUAHDRAWCAPTION - 0x00AE, WM_NCUAHDRAWFRAME - 0x00AF if(message==0x00AE ||message==0x00AF) { // AfxMessageBox(_T("aaaa")); return TRUE; } return CDialog::WindowProc(message, wParam, lParam);}因为上面的代码将系统的默认窗体的最大最小关闭按钮给屏蔽了,所以这时候要显示tip信息要人为处理的 尝试了一下,设断点跟踪,确实return了上面的三个值,逻辑是对的,但是没有tip信息显示 代码如下:LRESULT CColorTitleDlg::OnNcHitTest(CPoint point){ CRect windowrect; GetWindowRect(&windowrect); //ScreenToClient(&point); point.Offset(-windowrect.left, -windowrect.top); CDC* pWinDC=GetWindowDC(); CString strTipText; if(m_rectMinBtn.PtInRect(point)) { return HTMINBUTTON; } else if(m_rectMaxBtn.PtInRect(point)) { return HTMAXBUTTON; } else if(m_rectCloseBtn.PtInRect(point)) { return HTSYSMENU; } return CDialog::OnNcHitTest(point);} 那你就创建一个tooltip啊SetRect,设置tooltip的跟踪区域 标题栏是通过贴bitmap实现的,包括最大化,最小化和关闭按钮,当用户鼠标点击这三个按钮图片时,判断当前鼠标点是否在最大化,最小化和关闭按钮的矩形区域内,然后执行对应ShowWindow操作。 To hurryboylqs: 谢谢你提供的思路,设置侦测矩形区域就可以实现了--------------------------------------------查阅MSDN,使用CToolTipCtrl的成员函数Create,AddTool,Activate,SetDelayTime,SetToolRect,UpdateTipText,Pop,RelayEvent就可以实现了~ 响应事件 MSN的多人通话是用P2P技术实现的吗 createprocess进程问题, 如何修改mfc生成的菜单的代码 如何获得FILTER的DisplayName 一个让人丈二和尚摸不着头脑的编译错误 大家说我该不该跳,转行做梦寐的软件开发(希望各位帮小弟出出主意)?? 比较邪门的东西,请问怎样用一个程序控制另一个程序按键和在另一个程序的文本框中输入文字 金山界面如何入门? shell属性页扩展编程中,idl文件中识别不到接口类型,怎么办 子类“重载”父类的方法,这里的重载是什么概念? MFC实现TXT文件读取和在编辑框中显示的问题,急!!!!
返回HTMINBUTTON 表示在最小化按钮上
返回HTMAXBUTTON 表示在最大化按钮上
返回HTSYSMENU 表示在关闭按钮上
LRESULT CColorTitleDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
// TODO: 在此添加专用代码和/或调用基类
if (message == WM_NCHITTEST)
{
LRESULT lRet = CDialog::WindowProc(message, wParam, lParam); //屏蔽默认窗体的最大最小关闭按钮以及系统菜单(自绘后的最大最小关闭按钮的判断由对应的按钮窗口坐标来判断)
if(lRet==HTZOOM || lRet == HTMINBUTTON || lRet == HTCLOSE || lRet==HTSYSMENU)
return HTCAPTION;//视为标题栏动作。
else
return lRet;
} //这里避免窗口重绘系统按钮(最大化最小化关闭)
//这两条消息是在xp sp2后加的: WM_NCUAHDRAWCAPTION - 0x00AE, WM_NCUAHDRAWFRAME - 0x00AF
if(message==0x00AE ||message==0x00AF)
{
// AfxMessageBox(_T("aaaa"));
return TRUE;
} return CDialog::WindowProc(message, wParam, lParam);
}
因为上面的代码将系统的默认窗体的最大最小关闭按钮给屏蔽了,所以这时候要显示tip信息要人为处理的
{
CRect windowrect;
GetWindowRect(&windowrect);
//ScreenToClient(&point);
point.Offset(-windowrect.left, -windowrect.top); CDC* pWinDC=GetWindowDC(); CString strTipText; if(m_rectMinBtn.PtInRect(point))
{
return HTMINBUTTON;
}
else if(m_rectMaxBtn.PtInRect(point))
{
return HTMAXBUTTON;
}
else if(m_rectCloseBtn.PtInRect(point))
{
return HTSYSMENU;
} return CDialog::OnNcHitTest(point);
}
SetRect,设置tooltip的跟踪区域
--------------------------------------------
查阅MSDN,使用CToolTipCtrl的成员函数Create,AddTool,Activate,SetDelayTime,SetToolRect,UpdateTipText,Pop,RelayEvent就可以实现了~