靜態文本超鏈接

 近寫一個小的對話框程序時,想加一個文本超鏈接,研究了一下,發上自己的研究成果,供大家參考。下面說說完整的步驟。

(假定靜態文本ID爲ID_STATIC)

首先,設置鼠標的形狀及響應鼠標點擊

第一步,在Dlg類中定義一個protect成員變量HCURSOR  m_hCursor,

在構造函數裏(或者在OnInitDialog()裏)調用語句

m_hCursor=AfxGetApp()->LoadCursor(IDI_CURLINK);加載鼠標;

第二步,在Dlg類中定義一個protect成員變量RECT  m_StaticRect,表示靜態文本的座標,在成員函數OnInitDialog()裏調用語句

GetDlgItem(IDC_STATIC)->GetWindowRect(&m_StaticRect);

ScreenToClient(&m_StaticRect);

第三步,加載鼠標移動消息,在OnMouseMove()裏調用語句

if( point.x > m_StaticRect.left && point.x < m_StaticRect.right &&
    point.y > m_StaticRect.top  && point.y < m_StaticRect.bottom ) 
    
       SetCursor(m_hCursor); 
    }

第四步,加載鼠標單擊消息,在OnLButtonDown()裏添加語句

if( point.x > m_StaticRect.left && point.x < m_StaticRect.right &&point.y > m_StaticRect.top  && point.y < m_StaticRect.bottom )
{
SetCursor(m_hCursor);
ShellExecute(NULL,"open",TEXT("http://www.tlu.edu.cn"),NULL,NULL, SW_SHOWNORMAL);
}

注意,若是郵箱,則改爲ShellExecute(NULL, "open",_T("mailto:[email protected]"), NULL, NULL, SW_SHOWNORMAL);

在鼠標單擊擡起的時候最好也加上SetCursor(m_hCursor);使得鼠標的移動更流暢,鼠標右鍵消息也可以加上SetCursor(m_hCursor)。

其次,設置靜態文本的字體與顏色

第一步,字體的設置:在Dlg類中定義一個protect成員變量CFont m_Font表示字體,在類的成員函數OnInitDialog()裏調用m_Font.CreateFont(……),注意參數很多,參考MSDN。接着編寫兩行代碼:

CStatic *m_static=(CStatic *)GetDlgItem(IDC_STATIC);

m_static->SetFont(&m_Font,false);

第二步,顏色的設置:在Dlg中加載WM_CTLCOLOR消息,在此消息的響應函數OnCtlColor(……)裏添加如下代碼:

HBRUSH CScreenShotsDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    if (pWnd->GetDlgCtrlID() == IDC_STATIC)
     {
       pDC->SetTextColor(RGB(255, 0, 0));
     }
    return hbr;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章