我想在鼠标停留在文字上时文字出现下划线。在鼠标移出文字时下划线小时。我从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
处理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
解决方案 »
- 怎么使按下键盘的向下(VK_DOWN)相当于按照下了TAb键(VK_TAB)
- 不能将参数 1 从“CCSocketDlg *const ”转换为“CSocketDlg *”
- CAsyncocket的error C2146: syntax error : missing ';' before identifier '
- 如何实现每个子窗口都在任务栏占用一个位置,像IE一样???
- 邮件发送原理
- 求助一个模拟键盘输入的源码!
- Igj1012 快进来拿分
- const char*和char*作返回值的问题?
- 请问有关createthread函数的一个问题
- 一个asp问题:怎么通过CreateObject创建一个Media player对象,能给些代码吗?
- 想创建一个可以显示音效可视化的窗口
- vc activeX的功能
就完成你至于下划线不消失,是由于窗体刷新掉。如果你设置字体颜色的话
那么当鼠标离开控件的时候,下划线的颜色就是,之前字体的颜色O在这个函数中nMouseLeave(UINT nFlags,CPoint point)
使用SetWindowText()函数显示一下文本就可以,这个参数就是
你之前获取的文本。
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;
我发现如果我把这段注释掉的话下划线就能正确消失了,但是背景色就不对了,求解?