1. 程式人生 > 實用技巧 >可自定義的超連結控制元件

可自定義的超連結控制元件

介紹 CURLLinkButton類通過提供對URL連結的支援擴充套件了CButton的功能。它顯示URL連結,並在單擊時呼叫shell。它可以用於您的專案連結到任何URL,如您的網站,應用程式,資料夾或您的電子郵件。你也可以像其他按鈕一樣使用它來顯示一個訊息框,對話方塊或任何你喜歡的東西。 這是一個超連結控制元件,它的作用類似於Internet Explorer®中使用的超連結控制元件,具有以下特點: 可以插入任何對話方塊中,表單或檢視連結到任何網址和電子郵件包含一個內建的工具提示定製顯示的文字,URL字首,URL,提示文字自定義超連結的顏色(懸停定期訪問)和工具提示(文字顏色、背景顏色)使用一個自定義游標或使用標準的手游標調整一個URL連結按鈕的大小可以聚焦按鈕的標題,導航和啟用使用鍵盤傳送訊息給家長當點選容易理解,易於使用的 感謝Niek Albers的_TrackMouseEvent()。感謝Paul DiLascia為WinHlp32提供了預設的手動游標。 使用的程式碼 程式碼非常短,可重用且易於理解。為了在你的專案中使用這個控制元件,你需要: 在定義控制元件的標頭檔案中包括URLLinkButton.h向對話方塊或表單新增一些按鈕。為要自定義為超連結控制元件的每個按鈕新增成員變數。將這些變數的型別從CButton替換為CURLLinkButton。使用以下操作符自定義控制元件: 隱藏,複製Code

//Resize a URL link button to the size of the button's caption
void SizeToContent();

//Customize the colors of Hyperlink 
void SetLinkColor(COLORREF clrRegular, COLORREF clrHover, COLORREF clrVisited);

//Customize the colors of the Tooltip
void SetToolTipColor(COLORREF clrTextColor, COLORREF clrBkColor);

//
Customize the tooltip text. Use default tooltip if sTip is empty void SetToolTipText(CString sTip=_T("")); // Set URL. By default, window text will be used void SetURL (LPCTSTR lpszURL); //Set URL prefix. For example "mailto:" void SetURLPrefix (LPCTSTR lpszPrefix);

如果您的專案中有遊標資源,您可以自定義遊標或您可以使用預設的手遊標: 隱藏,複製Code

#if(WINVER >= 0x0500)
    //Load system hand cursor
    m_hCursorHand = AfxGetApp()->LoadCursor (IDC_HAND); 
#else
    // Use a custom Hand cursor
    // Must add a cursor resourse in the project with ID: IDC_CURSOR_HAND
    //m_hCursorHand = AfxGetApp()->LoadCursor (IDC_CURSOR_HAND);

    // If you haven't the cursor resource in your project
    // load default hand cursor from WinHlp32 module with ID=106
    TCHAR szWindowsDir[MAX_PATH];
    GetWindowsDirectory(szWindowsDir ,MAX_PATH);
    strcat(szWindowsDir,"\\Winhlp32.exe");
    HMODULE hModule = LoadLibrary(szWindowsDir); 
    if (hModule)
        m_hCursorHand = ::LoadCursor(hModule, MAKEINTRESOURCE(106));
#endif 

單擊連結按鈕時,將呼叫ShellExecute以開啟URL。如果失敗,它將向父視窗傳送一條已註冊的訊息。 隱藏,複製Code

const UINT WM_LINK_CLICKED = ::RegisterWindowMessage (_T ("WM_LINK_CLICKED"));

您可以建立父視窗的訊息處理程式,以便在單擊超連結時執行任何您想要的操作。例如: 隱藏,複製Code

afx_msg LRESULT OnLinkCliked(WPARAM wParam, LPARAM lParam);

ON_REGISTERED_MESSAGE(WM_LINK_CLICKED, OnLinkCliked)

LRESULT CURLLinkDlg::OnLinkCliked(WPARAM wParam, LPARAM lParam)
{
   UINT nLinkID = (UINT)wParam;
   switch(nLinkID)
   {
     case IDOK:
          OnOK();
     break;
     case IDC_SHOW_MESSAGE:
          MessageBox(_T("Hope you find this code useful!"));
     break;
   }

   return 0;
}

歷史 2004年7月18日 程式碼專案的首次公開發布 2005年3月2日 固定記憶體洩漏固定無限迴圈問題時呼叫返回鍵在連結上顯示對話方塊。你現在不需要檢查選項“所有者繪製”的連結按鈕 本文轉載於:http://www.diyabc.com/frontweb/news513.html