给VC程序加入超级链接功能
苏水荣 2000-11-07 15:42:27
我们现在所设计的程序中,或多或少都会涉及到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++例子。
|