I use an owner-drawn button and the following code:

Code:
void CAboutDlg::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct) 
{
	if (nIDCtl==IDC_LINK)
	{
		CString strURL;
		GetDlgItem(IDC_LINK)->GetWindowText(strURL);

		COLORREF cr = lpDrawItemStruct->itemState & ODS_SELECTED
			? RGB(255,0,0) : RGB(0,0,255);
		CRect rcItem = lpDrawItemStruct->rcItem;
		rcItem.top += 2;

		CDC dc;
		dc.Attach(lpDrawItemStruct->hDC);

		CPen pen(PS_SOLID, 1, cr);
		CPen* pOld = dc.SelectObject(&pen);
		dc.SetTextColor(cr);

		dc.DrawText(strURL, &rcItem, DT_CALCRECT | DT_SINGLELINE);
		dc.DrawText(strURL, &rcItem, DT_SINGLELINE);
		dc.MoveTo(rcItem.left, rcItem.bottom);
		dc.LineTo(rcItem.right, rcItem.bottom);

		dc.SelectObject(pOld);
		dc.Detach();
	}
}

BOOL CAboutDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) 
{
	if (pWnd->GetDlgCtrlID()==IDC_LINK)
	{
		if (HCURSOR hCurs = LoadCursor(NULL, MAKEINTRESOURCE(32649)))
		{
			SetCursor(hCurs);
			return TRUE;
		}
	}
	return CDialog::OnSetCursor(pWnd, nHitTest, message);
}