鼠标移到cstatic,改变光标/鼠标。 setcursor

老哥恰好有这样一段现成的程序,功能比你的很少一点:增长了改变为红色的功能,仍是比较简单:
1 定义手形鼠标资源:
#ifndef  IDC_HAND 
#define  IDC_HAND  MAKEINTRESOURCE(32649) 
#endif
2 定义好字体变色色开关bool m_bColorSwitchOpened;不为TRUE时字体变红,初始化为FALSE,
3 定义下画线函数,以便于调用 html

void CCtmpDlg::AddLine() 
{ 
CRect rect; 
CStatic *sta=(CStatic *)GetDlgItem(IDC_STATIC1); 
CDC* DC=GetDC(); 
sta->GetWindowRect(&rect); 
ScreenToClient(&rect); 
DC->MoveTo(rect.left,rect.bottom); 
DC->LineTo(rect.right,rect.bottom); 

}


4 增长WM_CTLCOLOR消息函数,以改变CStatic的颜色和加上下划线 函数

HBRUSH CCtmpDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{ 
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); 

if(( pWnd->GetDlgCtrlID()==IDC_STATIC1)&&m_bColorSwitchOpened)//CStatic ID 
{ 

SetTextColor(pDC->GetSafeHdc(),RGB(255,0,0));//改成红色 
} 
AddLine();//加上下画线 
return hbr; 
}


4 增长WM_MOUSEMOVE消息函数,当鼠标移到CStatic上时为手形鼠标,并触发改变字体颜色开关 post

void CComToolsDlg::OnMouseMove(UINT nFlags, CPoint point) 
{ 

CStatic *msgbox=(CStatic*)GetDlgItem(IDC_STATIC1); 
CRect rect; 
    GetClientRect(&rect); 
static bool //为消除闪烁设定 
oldSwitch=false, 
newSwitch=false; 

msgbox->GetWindowRect(&rect); 
ScreenToClient(&rect); 
if(PtInRect(rect,point)) 
{ 
SetCursor(LoadCursor(NULL,IDC_HAND)); //手形 
newSwitch=true; 
m_bColorSwitchOpened=true;//变红字 
} 
else 
{ 
newSwitch=false; 
m_bColorSwitchOpened=false; 
} 
if(oldSwitch!=newSwitch) 
{ 
oldSwitch=newSwitch; 
msgbox->Invalidate(); 
} 
CDialog::OnMouseMove(nFlags, point); 
}

转载于:https://www.cnblogs.com/rogee/archive/2011/02/16/1956219.html字体