给VC程序加入超级链接功能

发表于:2007-07-04来源:作者:点击数: 标签:
苏水荣 我们现在所设计的程序中,或多或少都会涉及到Internet操作,这就需要我们的程序具有初步的Internet处理能力。本文将向大家介绍把Internet的超级链接(Hyper Link)能力加入到我们用VC++设计的程序中的方法。 Win32 API函数中有一个函数ShellExcute,它
苏水荣

  我们现在所设计的程序中,或多或少都会涉及到Internet操作,这就需要我们的程序具有初步的Internet处理能力。本文将向大家介绍把Internet的超级链接(Hyper Link)能力加入到我们用VC++设计的程序中的方法。

  Win32 API函数中有一个函数ShellExcute,它的原型是:

  HINSTANCE ShellExecute(HWND hwnd, LPCTSTR lpOperation, LPCTSTR lpFile,

  LPCTSTR lpParameters, LPCTSTR lpDirectory, INT nShowCmd );

  这个函数可以使用已经在Windows注册的相关程序打开Windows系统中的文件。例如给出一个URL到lpFile参数中,系统会启动浏览器去浏览网址;给出一个.DOC文档到lpFile中,系统会使用Word打开这个文档。


  图1

  我们利用Visual C++向导生成一个单文档界面的窗口程序框架,如图1。生成一个新的对话框。用AppWizard建立一个基于通用窗口的新类CHyperLinkWnd,并修改代码如下:

  CHyperLinkWnd::CHyperLinkWnd() //构造函数

  { m_hLinkCursor = AfxGetApp()-〉LoadCursor(IDC_LINK); //引入手指形状的光标 }

  void CHyperLinkWnd::OnMouseMove(UINT nFlags, CPoint point)

  { ::SetCursor(m_hLinkCursor);//当鼠标在窗口上移动,光标变成手指状

   CWnd::OnMouseMove(nFlags, point);}

  BOOL CHyperLinkWnd::Create( const RECT&& rect, CWnd? pParentWnd)

  //创建窗口

  { return CWnd::Create ( NULL, NULL, WS_CHILD|WS_VISIBLE, rect, pParentWnd,NULL,NULL);}

  BOOL CHyperLinkWnd::SetLinkString(CString m_LinkString)

  { LinkString

  =m_LinkString;

  //设置窗口的提示信息

   return TRUE; }

  void CHyperLinkWnd::SetLink(CString m_Link)

  { Link=m_Link; //设置链接网址信息 }

  void CHyperLinkWnd::OnLButtonDown(UINT nFlags, CPoint point)

  { ::ShellExecute(this-〉m_hWnd,"open",Link,NULL,NULL,SW_SHOWMAXIMIZED); }

  void CHyperLinkWnd::OnPaint()

  { CFont? Font=NULL;

  CPaintDC dc(this); //设置超级链接中的显示字体信息,即蓝色有下划线

   dc.SetTextColor(RGB(0, 0, 255));

   dc.SetBkColor(::GetSysColor(COLOR_3DFACE));

   m_font=dc.GetCurrentFont();

   LOGFONT lFont;

   m_font-〉GetObject(sizeof(lFont), &&lFont);

   m_font=NULL;

   m_font=new CFont();

   lFont.lfUnderline=TRUE;

   m_font-〉CreateFontIndirect(&&lFont);

   dc.SelectObject(m_font);

   dc.TextOut(0,0,LinkString);}

  //使用这个类的一个范例,即在一个对话框中使用这些超级链接

  BOOL CNetPrice::OnInitDialog()

  { RECT rect;

  HyperLinkWnd[0]=new CHyperLinkWnd(); //使用这个类,可以先在对话框中用一个CStatic框定位,并去掉它的Visible属性,然后用代码取得它的位置,并将超级链接窗口放上去

  m_Canton.GetWindowRect(&&rect);

  this-〉ScreenToClient(&&rect);

  HyperLinkWnd[0]-〉SetLinkString("广州太平洋电脑城");

  HyperLinkWnd[0]-〉SetLink("www.pconline.com.cnt");

  HyperLinkWnd[0]-〉Create(rect,this);

  ……//略掉部分重复代码

  HyperLinkWnd[6]=new CHyperLinkWnd();//下面这个是使用邮件链接的例子

  m_SendEMail.GetWindowRect(&&rect);

  this-〉ScreenToClient(&&rect);

  HyperLinkWnd[6]-〉SetLinkString("发邮件给总公司");

  HyperLinkWnd[6]-〉SetLink("MailTo:Alexandrite@cmmail.com");

  HyperLinkWnd[6]-〉Create(rect,this);

  return TRUE;}

  最后,编译连接,得到一个可以使用超级链接的VC++例子。    

原文转自:http://www.ltesting.net