用VC++6.0編寫撥號程式 (轉)

gugu99發表於2008-05-12
用VC++6.0編寫撥號程式 (轉)[@more@]撥號上網是編寫應用常用的操作,在執行某些網上操作前,需要先撥號與網路連線,完成操作後由必須收線斷開。在 95/98的"撥號網路"中,雖然提供撥號功能,但無法直接讓自己開發的應用程式來調。而在註冊的常用的當中又沒有提供。
  本方法是利用VC++製作一個撥號控制元件,提供撥號與收線功能。VC++ 6.00提供控制元件的建立引導(MFC ControlWizard)可以生成ActiveX 控制元件的程式。撥號功能是由VC++提供的 ras32.lib 的庫支援的,函式及變數在 ras.h 頭定義。函式RasDial()實現撥號功能,RasHangUp()用來終止撥號連線。函式方法:
D dwRet = RasDial( NULL, NULL,
&rdParams, 0L, NULL, &hRann );
DWORD dwRet = RasHangUp( hRasConn );
其中:
rdParams 為 RASDIALPARAMS 結構,
主要引數定義如下:
DWORD dwSize 結構變數的大小;
TCHAR szEntryName[] 撥號網路中建立的連線名;
TCHAR szPhoneNumber[] 電話號碼,
若採用 szEntryName 中定義的號碼,置為NULL 值;
CHAR szCallbackNumber[] 回撥號碼,不用時置為NULL;
TCHAR szUserName[] 名;
TCHAR szPassword[] 使用者口令;
TCHAR szain[] 使用者驗證域,
若為'*'採用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 的點陣圖,該圖將在的資源工具箱中顯示為一個圖示。實際上圖示可以顯示到 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)GetStock(WHITE_BRUSH)));
//pdc->Ellipse(rcBounds);
//限制控制元件視窗大小
if (rcBounds.Height!=25 ||
rcBounds.Width!=25)SetControlSize(25,25);
//顯示點陣圖
CBitmap bitmap;
CBitmap* pOlitmap;
CDC MemDC;
MemDC.CreateCompatibleDC(pdc);
bitmap.LoadBitmap(IDB_DIALER);
pOldBitmap=MemDC.Object(&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, mWorking);
lstrcpy( rdParams.szPhoneNumber, m_phone);
rdParams.szCallbackNumber[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


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-1003900/,如需轉載,請註明出處,否則將追究法律責任。

相關文章