用VC++6.0編寫撥號程序

用VC++6.0編寫撥號程序 作者:陳曉東 發佈時間:2001/05/22 
 
 
 
文章摘要:
  本文利用visual c++6.0給出了一個撥號程序的實現,可以作爲VC學習者編程實踐的範例。 
        

--------------------------------------------------------------------------------
 
正文:   

用VC++6.0編寫撥號程序   
  撥號上網是編寫網絡應用軟件常用的操作,程序在運行某些遠程網上操作前,需要先撥號與網絡連接,完成操作後由必須收線斷開。在Windows 95/98的"撥號網絡"中,雖然提供撥號功能,但無法直接讓自己開發的應用程序來調。而在系統註冊的常用的控件當中又沒有提供。
  本方法是利用VC++製作一個撥號控件,提供撥號與收線功能。VC++ 6.00提供控件的創建引導(MFC ActiveX ControlWizard)可以快速生成ActiveX 控件的程序框架。撥號功能是由VC++提供的 rasapi32.lib 的函數庫支持的,函數及變量在 ras.h 文件頭定義。函數RasDial()實現撥號功能,RasHangUp()用來終止撥號連接。函數調用方法:
DWORD dwRet = RasDial( NULL, NULL,
&rdParams, 0L, NULL, &hRasConn );
DWORD dwRet = RasHangUp( hRasConn );
其中:
rdParams 爲 RASDIALPARAMS 結構,
主要參數定義如下:
DWORD dwSize 結構變量的大小;
TCHAR szEntryName[] 撥號網絡中建立的連接名;
TCHAR szPhoneNumber[] 電話號碼,
若採用 szEntryName 中定義的號碼,置爲NULL 值;
CHAR szCallbackNumber[] 回撥號碼,不用時置爲NULL;
TCHAR szUserName[] 用戶名;
TCHAR szPassword[] 用戶口令;
TCHAR szDomain[] 用戶權限驗證域,
若爲'*'採用szEntryName 中定義的域進行驗證。
HRasConn 是 HRASCONN 結構,作遠程撥號連接句柄。

一、 建立工程項目

  啓動CV++集成開發環境,打開"New"對話框,選中Projects中的 "MFC ActiveX Control Wizard", 在Project name 項輸入"Dialer" ,在Location 項會生成相應的路徑。單擊OK鈕進入第二步,保留默認值。單擊Next 進入最後一步,選中 Invisible at run time (運行時窗口不可見),其餘保持默認。按Finish 鈕,彈出一個信息對話框,按OK鈕完成工程項的創建。

二、修改控件圖標

  工程項自動生成一個15 X 15 Bitmap 的位圖,該圖將在VB 的資源工具箱中顯示爲一個圖標。實際上圖標可以顯示到 25 X 25 大小尺寸的位圖。您需要將該位圖改爲自己的位圖。VC++集成開發環境提供繪圖工具讓您修改。

三、 制控件界面

  在應用程序設計時,嵌入的控件會顯示一個界面。工程項創建時自動生成一個橢圓例圖。在這裏我們要去掉畫橢圓的代碼,並增加如下代碼來限制控件窗口的大小及畫出控件設計時的顯示圖標:
void CDialerCtrl::OnDraw(CDC* pdc,
const CRect& rcBounds, const CRect& rcInvalid)
{
// TODO: Replace the following code
with your own drawing code.
//pdc- >FillRect(rcBounds,CBrush::FromHandle
((HBRUSH)GetStockObject(WHITE_BRUSH)));
//pdc->Ellipse(rcBounds);
//限制控件窗口大小
if (rcBounds.Height!=25 ||
rcBounds.Width!=25)SetControlSize(25,25);
//顯示位圖
CBitmap bitmap;
CBitmap* pOldBitmap;
CDC MemDC;
MemDC.CreateCompatibleDC(pdc);
bitmap.LoadBitmap(IDB_DIALER);
pOldBitmap=MemDC.SelectObject(&bitmap);
pdc->BitBlt(0,0,48,48,&MemDC,0,0,SRCCOPY);
MemDC.SelectObject(pOldBitmap);
}

四、 添加撥號庫及頭文件---- 將rasapi32.lib 及 ras.h 加到工程項。

五、 添加控件屬性

  我們要在控件中設置一些屬性來實現應用程序與控件的傳遞參數及控制動作。在Class Wizard 的 Automation 標籤中 , Class name 項選中 CDialerCtrl ,單擊 Add Property 按鈕,增加控件屬性。

六、 增加撥號及收線函數

bool CDialerCtrl::DialUp(){ //撥號函數
RASDIALPARAMS rdParams;
rdParams.dwSize = sizeof(RASDIALPARAMS);
lstrcpy( rdParams. szEntryName, m_netWorking);
lstrcpy( rdParams.szPhoneNumber, m_phone);
rdParams.szCallbackNumber[0] = '/0';
lstrcpy( rdParams.szUserName, m_userName );
lstrcpy( rdParams.szPassword, m_passWord );
rdParams.szDomain[0] = '*';
hRasConn = NULL; //hRasConn
爲 HRASCONN 類型的變量;
DWORD dwRet = RasDial( NULL, NULL,
&rdParams, 0L, NULL, &hRasConn );
if ( dwRet == 0 ) {m_message="OK!";
m_returnCode = deRet; return true;}
//這裏省去出錯處理代碼
return false;
}
bool CDialerCtrl::HandUp(){ //收線函數
DWORD dwRet = RasHangUp( hRasConn );
//這裏省去出錯處理代碼
return true;
}

七、 增加動作函數

控件的Action 的值一有改變將自動運行該函數,Action 有兩個動作:1.撥號 2.收線。
void CXiaXinDialCtrl::OnActionChanged() {
// TODO: Add notification handler code
if (m_action==1) DialUp(); //調用撥號函數
if (m_action==2) HandUp(); //調用收線函數
SetModifiedFlag();
}

八、 編譯,鏈接,自動註冊

  啓動VC++的建立(build)動作,將實行編譯,鏈接生成 Dialer.ocx 並自動註冊到本機。這時您可以啓動VB 開發平臺 打開 Components 就可以看到剛註冊的 Dialer ActiveX Control Module 。

九、 VB 的調用方法

在VB的開發中,您可以和通用的控件一樣使用Dialer.ocx。調用方法如下:
Private Sub Command1_Click()
Dialer1.NetWorking = Text1.Text
Dialer1.UserName = Text2.Text
Dialer1.PassWord = Text3.Text
Dialer1.Phone = Text4.Text
Label5.Caption = "正在撥號..."
Dialer1.Action = 1
Labe15.Caption = Dialer1.Message
' 如果接通 窗口最小化
If XiaXinDial1.ReturnCode =
0 Then Form1.WindowState = 1
End Sub
 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章