我想在鼠标停留在文字上时文字出现下划线。在鼠标移出文字时下划线小时。我从CStatic上派生出一个类
处理OnMouseMove OnMouseHover OnMouseLeave三个消息。
结果鼠标在文字上暂留时有下划线产生。鼠标移出文字下划线并没有消失。各位帮忙看看什么问题。void CUnderLineText::OnMouseMove(UINT nFlags,CPoint point)
{
if(m_bMouseTrack)
{
TRACKMOUSEEVENT lpT;
lpT.cbSize=sizeof(TRACKMOUSEEVENT);
lpT.dwFlags=TME_LEAVE|TME_HOVER;
lpT.dwHoverTime=1;
lpT.hwndTrack=this->m_hWnd;
TrackMouseEvent(&lpT);
m_bMouseTrack=false;
}
}void CUnderLineText::OnMouseHover(UINT nFlags,CPoint point)
{
LOGFONT tf;
CFont* cf1=this->GetFont();
cf1->GetLogFont(&tf);
tf.lfUnderline=true;  
CFont cf2;
cf2.CreateFontIndirect(&tf);
this->SetFont(&cf2);
cf2.Detach();
Invalidate();
}void CUnderLineText::OnMouseLeave(UINT nFlags,CPoint point)
{
LOGFONT tf;
CFont* cf1=this->GetFont();
cf1->GetLogFont(&tf);
tf.lfUnderline=false;  
CFont cf2;
cf2.CreateFontIndirect(&tf);
this->SetFont(&cf2);
cf2.Detach();
m_bMouseTrack=true;
Invalidate();
}创建的时候风格用的是WS_CHILD|WS_VISIBLE|SS_NOTIFY

解决方案 »

  1.   

    OnMouseLeave的时候你要Invalidate一下
      

  2.   

    感觉实在做超链接控件一样,我做过一个,只是用OnMouseMove()函数,定时器,OnCtlColor()函数
    就完成你至于下划线不消失,是由于窗体刷新掉。如果你设置字体颜色的话
    那么当鼠标离开控件的时候,下划线的颜色就是,之前字体的颜色O在这个函数中nMouseLeave(UINT nFlags,CPoint point) 
    使用SetWindowText()函数显示一下文本就可以,这个参数就是
    你之前获取的文本。
      

  3.   

    这个好像有例子程序的,你可以上codeproject上找一下的
      

  4.   

    没有用额。我在OnCtlColor里是这样写的。
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); if(nCtlColor   ==   CTLCOLOR_STATIC)
    {
    if(pWnd->GetDlgCtrlID()==ID_STATIC_3||pWnd->GetDlgCtrlID()==ID_STATIC_4)
    {
    pDC->SetTextColor(RGB(22,112,235));
    }
    pDC->SetBkMode(TRANSPARENT);
    return HBRUSH(GetStockObject(HOLLOW_BRUSH));
    }
    return hbr; 
    我发现如果我把这段注释掉的话下划线就能正确消失了,但是背景色就不对了,求解?