很多windows軟件的版權(quán)對(duì)話框中都設(shè)有超級(jí)鏈接,這些鏈接或提供公司網(wǎng)址,或提供電子郵件信箱,使操作者能夠非常方便地與公司和作者聯(lián)系,同時(shí)也為公司作了很好的宣傳。如果能在自己寫的軟件中實(shí)現(xiàn)這個(gè)功能,定會(huì)使程序大增光彩。 ---- 實(shí)現(xiàn)這個(gè)功能要用到一個(gè)WINDOWS API函數(shù)ShellExecute,其原形為: HINSTANCE ShellExecute( HWND hwnd, //窗口句柄 LPCTSTR lpOperation, //操作類型 LPCTSTR lpFile, //文件指針 LPCTSTR lpParameters, //文件可帶的參數(shù) LPCTSTR lpDirectory, //缺省目錄 INT nShowCmd //顯示方式 ); ---- ShellExecute函數(shù)用于打開或執(zhí)行一個(gè)文件,在調(diào)用此函數(shù)時(shí)只須指定要打開或執(zhí)行的文件名,而不必管用什么程序去打開或執(zhí)行文件,WINDOWS會(huì)自動(dòng)根據(jù)要打開或執(zhí)行的文件去判斷該如何執(zhí)行文件或用什么程序去打開文件。以下給出一個(gè)完整實(shí)例,具體實(shí)步驟: 創(chuàng)建一個(gè)基于對(duì)話框的應(yīng)用程序,命名為hyperlink; 打開資源編輯器,在對(duì)話框上添加兩個(gè)static text控件和兩個(gè)button控件。 ---- Static1和button1并列排放,Static1和button1并列排放。 ---- 將static1的ID設(shè)為ID_STATIC1,caption設(shè)為:計(jì)算機(jī)世界日?qǐng)?bào):,button1的ID設(shè)為ID_BUTTON1,caption設(shè)為:http://www.,并選中flat屬性。將static2的ID設(shè)為:ID_STATIC2,caption設(shè)為為:給我寫信:,button2的ID設(shè)為ID_BUTTON2,caption設(shè)為: west_virginia@netease.com,并選中flat屬性。 創(chuàng)建一個(gè)新光標(biāo),將其圖標(biāo)編輯成一個(gè)手的圖像,其ID命名為ID_CURSOR1; 給ChyperlinkDlg類增加一個(gè)WM_SETCURSOR消息處理函數(shù),其代碼如下: 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); } 其作用是當(dāng)鼠標(biāo)位于button1和button2控件上時(shí), 將其形狀設(shè)為手形。 5、 給IDC_BUTTON1增加BN_CLICKD消息處理函數(shù),代碼如下: void ChyperlinkDlg::OnButton1() { // TODO: Add your control notification handler code here ShellExecute(m_hWnd,NULL, "http://www.", NULL,NULL,SW_SHOWMAXIMIZED); } 6、 給IDC_BUTTON2增加BN_CLICKD消息處理函數(shù),代碼如下: void ChyperlinkDlg::OnButton2() { // TODO: Add your control notification handler code here ShellExecute(m_hWnd,NULL, "mailto:west_virginia@netease.com", NULL,NULL,SW_SHOWMAXIMIZED); } ---- 運(yùn)行此程序,在對(duì)話框上顯示計(jì)算機(jī)世界日?qǐng)?bào)的首頁鏈接和作者的電子郵件地址,在其上點(diǎn)鼠標(biāo)左鍵后將自動(dòng)進(jìn)入計(jì)算機(jī)日?qǐng)?bào)首頁或啟動(dòng)郵件收發(fā)程序給作者寫信,效果很理想。讀者可在此基礎(chǔ)上進(jìn)一步完善,使其更專業(yè)化,也可將其寫成類,用起來更方便。 ---- ShellExecute是一功能很強(qiáng)大的函數(shù),本文只使用了它的一種用法,更詳細(xì)全面的用法可參考Visual studio 6.0中所帶的MSDN library 。 |
|