www.pudn.com > CraftFTP_gb.rar > DialRasDialog.cpp


// DialRasDialog.cpp : implementation file 
// 
 
#include "stdafx.h" 
#include "CraftFTP.h" 
#include "DialRasDialog.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CDialRasDialog dialog 
 
HWND CDialRasDialog::m_RasWnd = NULL; 
 
const DWORD CDialRasDialog::m_nHelpIDs[] = 
{ 
	IDC_STATIC_ENTRYNAME,	HIDC_STATIC_ENTRYNAME, 
	IDC_STATIC_STATUS,		HIDC_STATIC_STATUS, 
	0 , 0 
}; 
 
CDialRasDialog::CDialRasDialog(CWnd* pParent /*=NULL*/) 
	: CDialogEx(CDialRasDialog::IDD, pParent) 
{ 
	//{{AFX_DATA_INIT(CDialRasDialog) 
		// NOTE: the ClassWizard will add member initialization here 
	//}}AFX_DATA_INIT 
} 
 
 
void CDialRasDialog::DoDataExchange(CDataExchange* pDX) 
{ 
	CDialogEx::DoDataExchange(pDX); 
	//{{AFX_DATA_MAP(CDialRasDialog) 
	DDX_Control(pDX, IDC_ANIMATE_FRAME, m_wndAnimate); 
	//}}AFX_DATA_MAP 
} 
 
 
BEGIN_MESSAGE_MAP(CDialRasDialog, CDialogEx) 
	//{{AFX_MSG_MAP(CDialRasDialog) 
	ON_WM_CREATE() 
	ON_WM_TIMER() 
	//}}AFX_MSG_MAP 
	//ON_MESSAGE(WM_RASDIALEVENT, OnRasDialEvent) 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CDialRasDialog message handlers 
 
int CDialRasDialog::OnCreate(LPCREATESTRUCT lpCreateStruct)  
{ 
	if (CDialogEx::OnCreate(lpCreateStruct) == -1) 
		return -1; 
	 
	// TODO: Add your specialized creation code here 
	if (!m_wndAnimate.Create(WS_CHILD | WS_VISIBLE | ACS_AUTOPLAY | ACS_TRANSPARENT,  
		CRect(0,0,120,120), this, AFX_IDW_TOOLBAR+1000) || !m_wndAnimate.Open(IDR_RASDIAL_AVI)) 
	{ 
		TRACE0("Failed to create animation control.\n"); 
		return -1;      // fail to create 
	} 
 
	m_wndAnimate.MoveWindow(27, 30, 120, 120); 
 
	return 0; 
} 
 
BOOL CDialRasDialog::OnInitDialog()  
{ 
	CDialogEx::OnInitDialog(); 
	 
	// TODO: Add extra initialization here 
	m_nRasNumber = AfxGetApp()->GetProfileInt(_T("RasNetWork"), _T("RasNumber"), 5); 
 
	SetTimer(1, 500, NULL); 
	return TRUE;  // return TRUE unless you set the focus to a control 
	              // EXCEPTION: OCX Property Pages should return FALSE 
} 
 
void WINAPI CDialRasDialog::RasDialFunc(UINT unMsg, RASCONNSTATE rasconnstate, DWORD dwError) 
{ 
	::PostMessage(CDialRasDialog::m_RasWnd, WM_RASDIALEVENT, (WPARAM)rasconnstate, (LPARAM)dwError); 
} 
 
void CDialRasDialog::DoDial() 
{ 
	RASDIALPARAMS RasDialParams; 
	memset(&RasDialParams, 0, sizeof(RasDialParams)); 
	RasDialParams.dwSize = sizeof(RASDIALPARAMS); 
 
	CString szEntryName = AfxGetApp()->GetProfileString(_T("RasNetWork"), _T("EntryName")); 
	SetDlgItemText(IDC_STATIC_ENTRYNAME, (LPCTSTR)szEntryName); 
 
	strcpy(RasDialParams.szEntryName, (LPCTSTR)szEntryName); 
	strcpy(RasDialParams.szUserName,  AfxGetApp()->GetProfileString(_T("RasNetWork"), _T("UserName"))); 
	strcpy(RasDialParams.szPassword,  AfxGetApp()->GetProfileString(_T("RasNetWork"), _T("PassWord"))); 
 
	m_hRasConn = NULL; 
	CDialRasDialog::m_RasWnd = m_hWnd; 
 
	RasDial(NULL, NULL, &RasDialParams, 0L, (RASDIALFUNC)RasDialFunc, &m_hRasConn); 
} 
 
void CDialRasDialog::OnTimer(UINT nIDEvent)  
{ 
	// TODO: Add your message handler code here and/or call default 
	if(nIDEvent==1) 
	{ 
		KillTimer(1); 
		DoDial(); 
	} 
	CDialogEx::OnTimer(nIDEvent); 
} 
 
 
UINT CDialRasDialog::GetRasConnState(RASCONNSTATE rasconn) 
{ 
	switch( rasconn ) 
    { 
        case RASCS_OpenPort: 
            return IDS_OPENPORT; 
        case RASCS_PortOpened: 
            return IDS_PORTOPENED;             
        case RASCS_ConnectDevice: 
            return IDS_CONNECTDEVICE;         
        case RASCS_DeviceConnected: 
            return IDS_DEVICECONNECTED;        
        case RASCS_AllDevicesConnected: 
            return IDS_ALLDEVICESCONNECTED;    
        case RASCS_Authenticate: 
            return IDS_AUTHENTICATE;           
        case RASCS_AuthNotify: 
            return IDS_AUTHNOTIFY;             
        case RASCS_AuthRetry: 
            return IDS_AUTHRETRY;              
        case RASCS_AuthCallback: 
            return IDS_AUTHCALLBACK;           
        case RASCS_AuthChangePassword: 
            return IDS_AUTHCHANGEPASSWORD;     
        case RASCS_AuthProject: 
            return IDS_AUTHPROJECT;            
        case RASCS_AuthLinkSpeed: 
            return IDS_AUTHLINKSPEED;          
        case RASCS_AuthAck:  
            return IDS_AUTHACK;                
        case RASCS_ReAuthenticate: 
            return IDS_REAUTHENTICATE;         
        case RASCS_Authenticated: 
            return IDS_AUTHENTICATED;          
        case RASCS_PrepareForCallback: 
            return IDS_PREPAREFORCALLBACK;     
        case RASCS_WaitForModemReset: 
            return IDS_WAITFORMODEMRESET;      
        case RASCS_WaitForCallback: 
            return IDS_WAITFORCALLBACK;        
        case RASCS_Interactive: 
            return IDS_INTERACTIVE;            
        case RASCS_RetryAuthentication:  
            return IDS_RETRYAUTHENTICATION;             
        case RASCS_CallbackSetByCaller:  
            return IDS_CALLBACKSETBYCALLER;    
        case RASCS_PasswordExpired: 
            return IDS_PASSWORDEXPIRED;        
        case RASCS_Connected: 
            return IDS_CONNECTED;             
        case RASCS_Disconnected: 
            return IDS_DISCONNECTED;           
        default: 
            return IDS_UNDEFINED_ERROR; 
    } 
} 
 
LRESULT CDialRasDialog::OnRasDialEvent(WPARAM wparam, LPARAM lparam) 
{ 
	CWinApp * theApp = AfxGetApp(); 
 
	CString szMsg; 
	CString buf; 
 
	LoadString(AfxGetInstanceHandle(),GetRasConnState((RASCONNSTATE)wparam),buf.GetBuffer(256),256); 
	szMsg.ReleaseBuffer(); 
 
	SetDlgItemText(IDC_STATIC_STATUS,""); 
 
	//显示状态 
	BOOL bShowStatus = theApp->GetProfileInt(_T("RasNetWork"), _T("ShowStatus"), TRUE); 
	if(bShowStatus) 
		SetDlgItemText(IDC_STATIC_STATUS,buf); 
 
	if(lparam)					//错现错误 
    { 
		if(RasGetErrorString((UINT)lparam, szMsg.GetBuffer(256),256)!=0) 
		{ 
			szMsg.ReleaseBuffer(); 
			//szMsg.Format("未知的远程访问错误,"); 
			szMsg.Format("Unknow ras error. "); 
		} 
		else 
			szMsg.ReleaseBuffer(); 
 
		//buf.Format("错误代码为:%ld.",lparam); 
		buf.Format("Error Code: %ld.",lparam); 
		szMsg += buf; 
		SetDlgItemText(IDC_STATIC_STATUS, szMsg); 
 
		Cancel(); 
 
		m_nRasNumber --; 
		if(m_nRasNumber>0) 
		{ 
			//等待重拨 
			UINT nWaitNum = theApp->GetProfileInt(_T("RasNetWork"), _T("WaitTimes"), 1); 
			Sleep(nWaitNum*1000); 
			 
			//设置标题 
			SetWindowText(theApp->GetProfileString(_T("RasNetWork"), _T("ReRasTitle"), _T("Reestablish Connection..."))); 
 
			DoDial(); 
		} 
		else 
		{ 
			//关闭对话框 
			OnCancel(); 
		} 
    }                                                                                             
    else  
	if(RASCS_DONE&wparam)		//拨号连接成功 
		CDialog::OnOK();          // 关闭对话框 
 
	return (LRESULT)0; 
} 
 
LRESULT CDialRasDialog::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)  
{ 
	// TODO: Add your specialized code here and/or call the base class 
	if(message==WM_RASDIALEVENT) 
		return OnRasDialEvent(wParam,lParam); 
	else 
		return CDialogEx::DefWindowProc(message, wParam, lParam); 
} 
 
void CDialRasDialog::OnCancel()  
{ 
	// TODO: Add extra cleanup here 
	CWaitCursor w; 
 
	Cancel(); 
	CDialogEx::OnCancel(); 
} 
 
void CDialRasDialog::Cancel() 
{ 
	if(m_hRasConn!=NULL) 
	{ 
		RasHangUp(m_hRasConn); 
		m_hRasConn = NULL; 
	} 
}