可自定义的超链接控件

介绍 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

原文地址:https://www.cnblogs.com/Dincat/p/13450782.html