1、新建一個基於對話框的工程MyLink,在對話框中拖一個Static控件,ID可改為IDC_SLink。
2、在頭文件中添加成員變量:
private:
CRect m_Rect;
CFont* m_cfNtr;
CFont m_cfUL;
LOGFONT m_lfNtr, m_lfUL;
COLORREF m_color;
CBrush m_brush;
3、在.cpp文件中利用類向導添加初始化虛函數,並添加代碼:
BOOL CMyLinkDlg::OnInitDialog() { CDialog::OnInitDialog(); // 將“關於...”菜單項添加到系統菜單中。 // IDM_ABOUTBOX 必須在系統命令范圍內。 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { BOOL bNameValid; CString strAboutMenu; bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // 設置此對話框的圖標。當應用程序主窗口不是對話框時,框架將自動 // 執行此操作 SetIcon(m_hIcon, TRUE); // 設置大圖標 SetIcon(m_hIcon, FALSE); // 設置小圖標 // TODO: 在此添加額外的初始化代碼 GetDlgItem(IDC_SLink)->GetWindowRect(&m_Rect); ScreenToClient (&m_Rect); m_cfNtr = this->GetFont(); m_cfNtr->GetLogFont ( &m_lfNtr ); m_cfNtr->GetLogFont ( &m_lfUL ); m_lfUL.lfUnderline = TRUE; m_cfUL.CreateFontIndirect ( &m_lfUL ); m_brush.CreateSysColorBrush ( COLOR_MENU ); m_color = RGB (0,0,0); return TRUE; // 除非將焦點設置到控件,否則返回 TRUE }
再利用類向導添加下面幾個消息:
void CMyLinkDlg::OnLButtonUp(UINT nFlags, CPoint point) { // TODO: 在此添加消息處理程序代碼和/或調用默認值 CString strLink; UpdateData(TRUE); GetDlgItem(IDC_SLink)->GetWindowText(strLink); if (point.x > m_Rect.left && point.x < m_Rect.right && point.y < m_Rect.bottom && point.y > m_Rect.top ) { ShellExecute (NULL, NULL, strLink,NULL, NULL, SW_NORMAL); } CDialog::OnLButtonUp(nFlags, point); }
void CMyLinkDlg::OnMouseMove(UINT nFlags, CPoint point) { // TODO: 在此添加消息處理程序代碼和/或調用默認值 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 ); GetDlgItem(IDC_SLink)->SetFont ( &m_cfUL ); m_color = RGB (0,0,225); CStatic* m_pStatic = (CStatic*)GetDlgItem(IDC_SLink); m_pStatic->RedrawWindow (); } else { GetDlgItem(IDC_SLink)->SetFont ( m_cfNtr ); m_color = RGB (0,0,0); CStatic* m_pStatic = (CStatic*)GetDlgItem(IDC_SLink); m_pStatic->RedrawWindow(); } CDialog::OnMouseMove(nFlags, point); }
HBRUSH CMyLinkDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); // TODO: 在此更改 DC 的任何屬性 if ( nCtlColor == CTLCOLOR_STATIC ) { pDC->SetBkMode ( TRANSPARENT ); pDC->SetTextColor ( m_color ); return (HBRUSH)m_brush.GetSafeHandle (); } // TODO: 如果默認的不是所需畫筆,則返回另一個畫筆 return hbr; }
效果圖如下:
資料來源:http://www.pudn.com/downloads513/sourcecode/windows/shell/detail2129288.html