📄 vc中为应用程序实现超链接功能.txt
字号:
给VC程序加入超级链接功能
我们现在所设计的程序中,或多或少都会涉及到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打开这个文档。
我们利用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++例子。
用VC6.0实现超级链接
--------------------------------------------------------------------------------
很多windows软件的版权对话框中都设有超级链接,这些链接或提供公司网址,或提供电子邮件信箱,使操作者能够非常方便地与公司和作者联系,同时也为公司作了很好的宣传。如果能在自己写的软件中实现这个功能,定会使程序大增光彩。
---- 实现这个功能要用到一个WINDOWS API函数ShellExecute,其原形为:
HINSTANCE ShellExecute( HWND hwnd, //窗口句柄 LPCTSTR lpOperation, //操作类型
LPCTSTR lpFile, //文件指针 LPCTSTR lpParameters, //文件可带的参数
LPCTSTR lpDirectory, //缺省目录 INT nShowCmd //显示方式 );
---- ShellExecute函数用于打开或执行一个文件,在调用此函数时只须指定要打开或执行的文件名,而不必管用什么程序去打开或执行文件,WINDOWS会自动根据要打开或执行的文件去判断该如何执行文件或用什么程序去打开文件。以下给出一个完整实例,具体实步骤:
创建一个基于对话框的应用程序,命名为hyperlink;
打开资源编辑器,在对话框上添加两个static text控件和两个button控件。
---- Static1和button1并列排放,Static1和button1并列排放。
---- 将static1的ID设为ID_STATIC1,caption设为:计算机世界日报:,button1的ID设为ID_BUTTON1,caption设为:http://www.computerworld.com.cn,并选中flat属性。将static2的ID设为:ID_STATIC2,caption设为为:给我写信:,button2的ID设为ID_BUTTON2,caption设为: west_virginia@netease.com,并选中flat属性。
创建一个新光标,将其图标编辑成一个手的图像,其ID命名为ID_CURSOR1;
给ChyperlinkDlg类增加一个WM_SETCURSOR消息处理函数,其代码如下:
BOOL ChyperlinkDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) { Crect
rcButton1,rcButton2; Cpoint ptCursor; CWnd *pStatic1=GetDlgItem(IDC_BUTTON1);
CWnd *pStatic2=GetDlgItem(IDC_BUTTON2); pStatic1->GetWindowRect (rcButton1);
pStatic2->GetWindowRect (rcButton2); GetCursorPos(amp;ptCursor); if
(rcButton1.PtInRect (ptCursor) rcButton2.PtInRect (ptCursor)) { CWinApp *pApp=AfxGetApp();
HICON hIconBang=pApp->LoadCursor (IDC_CURSOR1); SetCursor(hIconBang); return
TRUE; } else return Cdialog::OnSetCursor (pWnd, nHitTest, message); }
其作用是当鼠标位于button1和button2控件上时,
将其形状设为手形。 5、 给IDC_BUTTON1增加BN_CLICKD消息处理函数,代码如下:
void ChyperlinkDlg::OnButton1() { // TODO: Add your control notification handler
code here ShellExecute(m_hWnd,NULL, "http://www.computerworld.com.cn",
NULL,NULL,SW_SHOWMAXIMIZED); } 6、 给IDC_BUTTON2增加BN_CLICKD消息处理函数,代码如下:
void ChyperlinkDlg::OnButton2() { // TODO: Add your control notification handler
code here ShellExecute(m_hWnd,NULL, "mailto:west_virginia@netease.com",
NULL,NULL,SW_SHOWMAXIMIZED); }
---- 运行此程序,在对话框上显示计算机世界日报的首页链接和作者的电子邮件地址,在其上点鼠标左键后将自动进入计算机日报首页或启动邮件收发程序给作者写信,效果很理想。读者可在此基础上进一步完善,使其更专业化,也可将其写成类,用起来更方便。
---- ShellExecute是一功能很强大的函数,本文只使用了它的一种用法,更详细全面的用法可参考Visual studio 6.0中所带的MSDN library 。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -