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;
}
}