CURLLinkButton - Customizable Hyperlink Control
2008-08-13 13:22
633 查看
Introduction
TheCURLLinkButtonclass extends the functionality of
CButtonby providing support for URL links. It displays the URL link and invokes the shell when clicked. It can be used in your project to link to any URL such as your website, an application, a folder or your email. You also can use it like other buttons to show a messagebox, dialogbox or anything you like.
This is a hyperlink control which really act like the ones used in Internet Explorer® with following features:
Can be plugged into any dialog, form or view
Link to the any URL and email
Contains a built-in ToolTip
Customize the displayed text, URL-Prefix, URL, Tooltip text.
Customize the colors of Hyperlink (regular, hover, visited) and Tooltip (text color, background color)
Use a custom cursor or use the standard Hand cursor
Resize a URL link button to the size of the button's caption
Can be focused, navigated and activated using the keyboard
Send a message to parent when clicked
Easy to understand, easy to use
Thanks to Niek Albers for
_TrackMouseEvent(). Thanks to Paul DiLascia for default hand cursor from WinHlp32.
Using the code
The code is quite short, reuseable and easy to understand. For using this control in your project, you need to do :Add URLLinkButton.h and URLLinkButton.cpp to your project.
Include URLLinkButton.h in the header file where the controls are defined
Add some buttons to the dialog or form. Add a member variable for each button you want to customize as a hyperlink control. Replace the type of those variables from
CButtonto
CURLLinkButton.
Use following operators to customize the control:
//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);
If you have a cursor resource in you project, you can customize the cursor or you can use default hand cursor
#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 resourse 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
When the link button is clicked,
ShellExecuteis called to open the URL. If this fails, it sends a registered message to the parent window.
const UINT WM_LINK_CLICKED = ::RegisterWindowMessage (_T ("WM_LINK_CLICKED"));
You can create a message handler of the parent window to do anything you want when the hyperlink is clicked. For example:
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; }
History
July 18, 2004:Initial public release to The Code Project.
March 02, 2005:
Fix memory leak.
Fix infinite loop problem when invoke the return key on the link to show a dialogbox
You now don't have to check the option “Owner draw” of the link button
相关文章推荐
- Hyperlink control
- 改变HyperlinkButton的下划线(Silverlight)
- Silverlight: 消除HyperlinkButton点击后出现的边框
- Windows Phone 8.1中TextBox的不可忽略的特性和HyperlinkButton的认识
- How to group Option Button (Form control) with cell link.
- 零元学Expression Blend 4 Chapter 22 以实作案例学习Frame及HyperlinkButton
- Control 'dgList_01' of type 'DataGridLinkButton' must be placed inside a form tag with runat=server.
- silverlight: 消除HyperlinkButton点击后出现的边框
- CHyperLink: a simple MFC HyperLink button class with any size 32bpp icons support
- sliverlight HyperlinkButton
- “form1”的 DefaultButton 必须是 IButtonControl 类型的控件的 ID
- “form1”的 DefaultButton 必须是 IButtonControl 类型的控件的 ID
- link_to 与button_to 的一些用法
- 利用GridView控件的HyperLinkField连接数据行
- AjaxControlToolKit ----ConfirmButtonExtender (确认提示框按钮扩展)的简单使用方法
- CCControlExtension/CCControlButton
- Showing Hyperlink Cues with CSS
- ControlTemplate in WPF —— Button
- cocos2dx-CCControlButton
- 使用SharePoint Web Serivce(4)-HyperLink Type Column 中令我发狂的空格