巧妙实现超链接控制

原创 2001年04月30日 13:35:00


    我们用MFC开发应用程序时,通常在窗口中放置大量的控件,通过触发这些控件的事件来完成我们的控制。但并不是每个控件都提供所有的事件消息,例如我们在对话窗口中加入一个静态文本控件(CState类),这时在ClassWizard中此控件没有任何消息,也就无法完成所要求的控制。VC++中为我们提供了一个API函数GetWindowRect(),此函数可以获得窗口中所有控件的位置,这样我们就可以在窗口的消息中利用位置判断来实现事件控制。

  基于以上原理,可以轻松的实现超链接控制和动态提示以及窗口区域事件捕获等功能。以超链接控制为例,通常我们在对话框中加入电子邮件或主页的超链接,超链接一般要求获得焦点后鼠标变形,并且能响应OnClick事件,下面简单介绍其实现原理。

  1.首先创建基于对话框的Sample工程。

  2.在Sample工程的资源文件中引入光标文件将其ID设为“IDC_HAND”,在SAMPLE工程中的DIALOG对话框中加入静态文本控件将其ID设为“IDC_LINK”,Caption设为“http://netvc.6to23.com”

  3.在对话类的头文件(SampleDlg.h)添加数据成员

   protected:

   RECT m_pRectLink; //用于保存静态文本框的屏幕坐标

  4.获取控件坐标

    在对话类成员函数OnInitDialog()中添加以下代码(sampleDlg.cpp):

   GetDlgItem(IDC_LINK) -> GetWindowRect(&m_pRectLink);

     //将静态文本的屏幕坐标存放在m_pRectLink中

   ScreenToClient(&m_pRectLink);

    //将屏幕坐标转换为客户坐标

   5.变换鼠标形状

    利用ClassWizard为对话框添加OnMouseMove()消息,在函数OnMouseMove(UINT nFlags, CPoint point)中,point参数可获得对应于窗口左上角的鼠标坐标,通过判断算法就可实现事件的控制。

  //下面设置鼠标在静态文本区时,将光标设成小手状

    if (point.x > m_pRectLink.left && point.x < m_pRectLink.right &&
point.y > m_pRectLink.top && point.y < m_pRectLink.bottom)

   //此处添加判断坐标算法

   {
HCURSOR hCursor;

hCursor = AfxGetApp() -> LoadCursor(IDC_HAND);

     //将鼠标设为小手状

       SetCursor(hCursor);
     }

   //下面语句用来设置默认(箭头)鼠标形状,一般鼠标移开后窗口会自动恢复默认鼠标形状,可酌情添加

   if (...)  //此处酌情添加鼠标不在静态文本区的坐标算法,本例可不加

     { 
      hCURSOR hCursor;

      hCursor = AfxGetApp() -> LoadStandardCursor(IDC_IBEAM);

      //将光标设为默认值(箭头)

      SetCursor(hCursor);
     }

  6.添加鼠标单击事件

   利用ClassWizard为对话框添加OnLButtonDown()消息,参数与OnMouseMove()一样。

     if (point.x > m_pRectLink.left && point.x < m_pRectLink.right &&
point.y > m_pRectLink.top && point.y < m_pRectLink.bottom)

   //此处添加判断坐标算法
{
if (nFlags == MK_LBUTTON) //鼠标左键按下

{ //为改善鼠标效果,此处加入以上变换鼠标形状的代码
ShellExecute(0, NULL, "http://netvc.6to23.com", NULL,NULL, SW_NORMAL);

//也可以添加电子邮件的链接
}
}

  在开发应用程序的过程中,灵活运用控件的位置可以实现一些特殊的消息控制。在以上例子中将静态文本稍加修饰,比如获得焦点时增加亮度或下画线效果会更好

VC++ 中巧妙实现超链接控制

 我们用MFC开发应用程序时,通常在窗口中放置大量的控件,通过触发这些控件的事件来完成我们的控制。但并不是每个控件都提供所有的事件消息,例如我们在对话窗口中加入一个静态文本控件(CState类),这时...
  • tanker1024
  • tanker1024
  • 2009年02月14日 09:28
  • 870

if语句中加入传值超链接的问题~求帮助

小弟想在if语句中加入一个传值超链接,如图所示。但是不管怎么插入都显示缺少语句。小弟自学asp不久~求各位大手帮忙改一下...
  • paosuishuo4588
  • paosuishuo4588
  • 2017年01月02日 11:05
  • 76

巧妙利用“盗引”,实现“项目嫁接”之术 赚取超高利润!

“所谓“盗”,此盗非彼盗,此盗又同盗,此盗之为盗,只因道盗道。” 人类自远古时期进化而来,经历了 猿人类、原始人类、智人类、现代类四个阶段。人类在进化这条路走的过程,源于模仿与学习,我称之为“修...
  • muyeseocom
  • muyeseocom
  • 2017年11月20日 09:32
  • 102

自动执行js方法改变超链接的值,并实现自动点击

this is a test js                                  function start(){                 //alert(do...
  • dean19900504
  • dean19900504
  • 2012年08月29日 16:49
  • 8984

css中的伪类 之 控制链接的样式。

a.test:link {color:#0000FF; text-decoration:none} a.test:visited {color:#00FF00; text-decoration:no...
  • sxzlc
  • sxzlc
  • 2012年09月20日 09:00
  • 532

springMVC 用超链接做国际化

默认情况下,SpringMVC 根据 Accept-Language 参数判断客户端的本地化类型 此时需要修改浏览器语言 超链接修改 当接受到请求时,SpringMVC 会在上下文中查找一个本地化解析...
  • wsl9420
  • wsl9420
  • 2016年10月22日 17:13
  • 338

UILabel点击实现超链接

为了实例化咱们的Label时必须做点啥.. 先来个协议. .h文件 复制代码 #import @class MyLabel; @protocol MyLabelDelegate @req...
  • iphonecat
  • iphonecat
  • 2016年04月28日 15:17
  • 223

超链接和图像

第2章 超链接和图像 主要内容 . 在网页中使用图像 . 相对路径和绝对路径 . 超链接 . 使用Dreamweaver制作相册 1. 在网页中使用图片 . 图片的格式 目前在网页中...
  • lfANDhyy4113287211
  • lfANDhyy4113287211
  • 2012年06月28日 11:39
  • 1703

asp.net超链接控件(HyperLink)

超链接控件相当于实现了HTML代码中的“”效果,当然,超链接控件有自己的特点,当拖动一个超链接控件到页面时,系统会自动生成控件声明代码,示例代码如下所示。        HyperLink上述代码声明...
  • anglekill
  • anglekill
  • 2011年04月11日 10:16
  • 1507

在Javascript(js)或Jquery中直接实现超链接跳转代码示例!

我做的是用于下载文件,当然网址也可以。  window.location = "../File/模板.xls"; 一句就够了!...
  • dxnn520
  • dxnn520
  • 2012年12月31日 05:47
  • 3932
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:巧妙实现超链接控制
举报原因:
原因补充:

(最多只允许输入30个字)