manarex 发表于 2023-8-13 13:07:28

MFC组件Static Text 添加超链接 设置字体颜色

MFC组件Static Text 添加超链接 设置字体颜色

从设置超链接的麻烦程度可见,MFC是多么的不灵活。

准备工作

头文件中添加成员变量:
CRect m_rect;

OnInitDialog()中添加:
GetDlgItem(IDC_STATIC_AUTHOR)->GetWindowRect(&m_rect);
ScreenToClient(&m_rect);
目的在于获取到Static Text的矩形区域


为Static Text添加超链接
对话框添加WM_LBUTTONUP(鼠标左键弹起)事件,OnLButtonUp()函数实现如下:

void CAntiHashDlg::OnLButtonUp(UINT nFlags, CPoint point)
{
      if (point.x>m_rect.left && point.x<m_rect.right&&point.y<m_rect.bottom&&point.y>m_rect.top)
      {
                ShellExecute(NULL,NULL,"http://www.longmagu.com/",NULL,NULL,SW_NORMAL);
      }
      CDialog::OnLButtonUp(nFlags, point);
}

如此点击Static Text的矩形区域就可以打开网页了。


使鼠标移至Static Text矩形区域变为手的形状
对话框添加WM_MOUSEMOVE(鼠标移动)事件,OnMouseMove()函数实现如下:

void CAntiHashDlg::OnMouseMove(UINT nFlags, CPoint point)
{
      if (point.x > m_rect.left && point.x < m_rect.right && point.y < m_rect.bottom && point.y > m_rect.top)
      {
                HCURSOR hCursor;
                hCursor = ::LoadCursor ( NULL, IDC_HAND );
                ::SetCursor ( hCursor );
      }
      CDialog::OnMouseMove(nFlags, point);
}



设置字体颜色
超链接总该是蓝色,不然无法引起用户的注意啊。

对话框添加WM_CTLCOLOR事件,OnCtlColor()函数实现如下:

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

      // TODO:在此更改 DC 的任何属性
      if (pWnd->GetDlgCtrlID() == IDC_STATIC_AUTHOR)
      {
                pDC->SetTextColor(RGB(64,148,199));
      }

      // TODO:如果默认的不是所需画笔,则返回另一个画笔
      return hbr;
}



页: [1]
查看完整版本: MFC组件Static Text 添加超链接 设置字体颜色