DragonNest/Server/ServiceMonitorEx/Source/ConnectionDialog.cpp

504 lines
23 KiB
C++
Raw Normal View History

2024-12-20 16:56:44 +08:00
<EFBFBD><EFBFBD>// ConnectionDialog.cpp : l<EFBFBD><EFBFBD> <EFBFBD>|Dž<EFBFBD>Ȳ<EFBFBD><EFBFBD>.
//
#include "stdafx.h"
#include "ServiceMonitor.h"
#include "ConnectionDialog.h"
#include "SubControlBaseView.h"
#include "ConfigMngr.h"
#include "NetConnection.h"
#include "VarArg.hpp"
#include "MainFrm.h"
#include "NetConnection.h"
#include "BasePartitionView.h"
// CConnectionDialog <EFBFBD>T<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>Dž<EFBFBD>Ȳ<EFBFBD><EFBFBD>.
IMPLEMENT_DYNAMIC(CConnectionDialog, CDialog)
CConnectionDialog::CConnectionDialog(CWnd* pParent /*=NULL*/)
: CDialog(CConnectionDialog::IDD, pParent)
{
}
CConnectionDialog::~CConnectionDialog()
{
}
void CConnectionDialog::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_IPADDRESS_SVMN, m_IpAddress);
DDX_Control(pDX, IDC_PORT_SVMN, m_PortNo);
DDX_Control(pDX, IDC_ID_SVMN, m_ID);
DDX_Control(pDX, IDC_PASS_SVMN, m_Pass);
}
BEGIN_MESSAGE_MAP(CConnectionDialog, CDialog)
ON_WM_TIMER()
ON_WM_DESTROY()
ON_BN_CLICKED(IDC_CNNDLG_CONNECT, &CConnectionDialog::OnBnClickedButtonConnect)
ON_BN_CLICKED(IDC_CNNDLG_DISCONNECT, &CConnectionDialog::OnBnClickedButtonDisconnect)
ON_BN_CLICKED(IDC_CNNDLG_CANCEL, &CConnectionDialog::OnBnClickedCnndlgCancel)
ON_WM_PAINT()
ON_WM_SIZE()
ON_WM_LBUTTONDOWN()
ON_WM_CLOSE()
END_MESSAGE_MAP()
void CConnectionDialog::SaveConfig()
{
{
DWORD aIpAddress;
m_IpAddress.GetAddress(aIpAddress);
CConfigMngr::GetInstancePtr()->m_IpAddress.Set(static_cast<UINT>(::htonl(aIpAddress)));
}
{
USES_CONVERSION;
TCHAR aPortNo[8] = { _T('\0'), };
m_PortNo.GetWindowText(aPortNo, _countof(aPortNo));
CConfigMngr::GetInstancePtr()->m_PortNo = static_cast<WORD>(_ttoi(aPortNo));
}
{
USES_CONVERSION;
TCHAR aID[SMIDLENMAX+1] = { _T('\0'), };
m_ID.GetWindowText(aID, _countof(aID));
CConfigMngr::GetInstancePtr()->m_ID = aID;
}
}
void CConnectionDialog::EnableButton(BOOL pIsConnect)
{
GetDlgItem(IDC_CNNDLG_CONNECT)->EnableWindow(!pIsConnect);
GetDlgItem(IDC_CNNDLG_DISCONNECT)->EnableWindow(pIsConnect);
}
CString CConnectionDialog::GetID() const
{
CString aRetVal;
TCHAR aID[SMIDLENMAX+1] = { _T('\0'), };
m_ID.GetWindowText(aID, _countof(aID));
aRetVal = aID;
return aRetVal;
}
CString CConnectionDialog::GetPass() const
{
CString aRetVal;
TCHAR aPass[SMPASSLENMAX+1] = { _T('\0'), };
m_Pass.GetWindowText(aPass, _countof(aPass));
aRetVal = aPass;
return aRetVal;
}
// CConnectionDialog T<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>̬<EFBFBD>0<EFBFBD><EFBFBD><EFBFBD>Ȳ<EFBFBD><EFBFBD>.
BOOL CConnectionDialog::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: <EFBFBD><EFBFBD>0<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD>0<EFBFBD>T<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>D<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>i<EFBFBD>Ȳ<EFBFBD><EFBFBD>.
CenterWindow();
{
m_IpAddress.SetAddress(::htonl(CConfigMngr::GetInstancePtr()->m_IpAddress.GetDecimal()));
}
{
USES_CONVERSION;
m_PortNo.SetWindowText(I2T(CConfigMngr::GetInstancePtr()->m_PortNo));
}
{
m_ID.SetWindowText(CConfigMngr::GetInstancePtr()->m_ID);
}
SetTimer(EV_TMD_UPDATECONNECTDIALOG, g_TimerInterval[EV_TMD_UPDATECONNECTDIALOG - EV_TIMERID_DEF], NULL);
return TRUE; // return TRUE unless you set the focus to a control
// <EFBFBD>x<EFBFBD>: OCX <EFBFBD><EFBFBD>1<EFBFBD> <EFBFBD><EFBFBD>t<EFBFBD><EFBFBD>ɔ<EFBFBD> FALSE|<EFBFBD> <EFBFBD>X<EFBFBD>t<EFBFBD>|<EFBFBD> i<EFBFBD>Ȳ<EFBFBD><EFBFBD>.
}
BOOL CConnectionDialog::PreTranslateMessage(MSG* pMsg)
{
// TODO: <EFBFBD><EFBFBD>0<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>T<EFBFBD><EFBFBD> T<EFBFBD>ܴ|<EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD>/<EFBFBD><EFBFBD><EFBFBD> 0<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>|<EFBFBD> 8֜<EFBFBD>i<EFBFBD>Ȳ<EFBFBD><EFBFBD>.
switch(pMsg->message) {
case WM_KEYDOWN:
{
switch(pMsg->wParam) {
case VK_ESCAPE:
// return TRUE; // ESC <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>\<EFBFBD> <EFBFBD>Ű<EFBFBD>=<EFBFBD> t<EFBFBD>Ȕ<EFBFBD> <EFBFBD>թ<EFBFBD> (CDialog::OnCancel() 8֜<EFBFBD>ij h<EFBFBD>خ <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>|<EFBFBD> h<EFBFBD>)
break;
}
}
break;
}
return CDialog::PreTranslateMessage(pMsg);
}
void CConnectionDialog::OnOK()
{
// TODO: <EFBFBD><EFBFBD>0<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>T<EFBFBD><EFBFBD> T<EFBFBD>ܴ|<EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD>/<EFBFBD><EFBFBD><EFBFBD> 0<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>|<EFBFBD> 8֜<EFBFBD>i<EFBFBD>Ȳ<EFBFBD><EFBFBD>.
// CDialog::OnOK();
}
void CConnectionDialog::OnCancel()
{
// TODO: <EFBFBD><EFBFBD>0<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>T<EFBFBD><EFBFBD> T<EFBFBD>ܴ|<EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD>/<EFBFBD><EFBFBD><EFBFBD> 0<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>|<EFBFBD> 8֜<EFBFBD>i<EFBFBD>Ȳ<EFBFBD><EFBFBD>.
SaveConfig();
CDialog::OnCancel();
}
void CConnectionDialog::OnTimer(UINT_PTR nIDEvent)
{
// TODO: <EFBFBD><EFBFBD>0<EFBFBD><EFBFBD><EFBFBD> T<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>̬<EFBFBD>0<EFBFBD> T<EFBFBD>ܴ|<EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD>/<EFBFBD><EFBFBD><EFBFBD> 0<EFBFBD><EFBFBD><EFBFBD><EFBFBD>D<EFBFBD> 8֜<EFBFBD>i<EFBFBD>Ȳ<EFBFBD><EFBFBD>.
switch(nIDEvent) {
case EV_TMD_UPDATECONNECTDIALOG:
{
DWORD aIpAddress = 0;
m_IpAddress.GetAddress(aIpAddress);
ULONG nConID = ::htonl(aIpAddress);
CNetConnection* pNetConnection = CNetConnectionMgr::GetInstancePtr()->GetConnection (nConID);
if (pNetConnection) // 0<EFBFBD>t<EFBFBD><EFBFBD><EFBFBD> ȍ<EFBFBD>\<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
CNetSession* pNetSession = pNetConnection->GetSession();
if (!pNetSession)
BASE_RETURN_NONE;
if (pNetSession->IsConnect())
{
if (GetDlgItem(IDC_CNNDLG_CONNECT)->IsWindowEnabled())
GetDlgItem(IDC_CNNDLG_CONNECT)->EnableWindow(FALSE);
if (!GetDlgItem(IDC_CNNDLG_DISCONNECT)->IsWindowEnabled())
GetDlgItem(IDC_CNNDLG_DISCONNECT)->EnableWindow(TRUE);
}
else
{
if (!GetDlgItem(IDC_CNNDLG_CONNECT)->IsWindowEnabled())
GetDlgItem(IDC_CNNDLG_CONNECT)->EnableWindow(TRUE);
if (GetDlgItem(IDC_CNNDLG_DISCONNECT)->IsWindowEnabled())
GetDlgItem(IDC_CNNDLG_DISCONNECT)->EnableWindow(FALSE);
}
}
else // <EFBFBD><EFBFBD>\<EFBFBD><EFBFBD><EFBFBD> <EFBFBD>Ȍ<EFBFBD>x<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
GetDlgItem(IDC_CNNDLG_CONNECT)->EnableWindow(TRUE);
GetDlgItem(IDC_CNNDLG_DISCONNECT)->EnableWindow(TRUE);
}
}
break;
default:
break;
}
CDialog::OnTimer(nIDEvent);
}
void CConnectionDialog::OnDestroy()
{
CDialog::OnDestroy();
// TODO: <EFBFBD><EFBFBD>0<EFBFBD><EFBFBD><EFBFBD> T<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>̬<EFBFBD>0<EFBFBD> T<EFBFBD>ܴ|<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>i<EFBFBD>Ȳ<EFBFBD><EFBFBD>.
KillTimer(EV_TMD_UPDATECONNECTDIALOG);
}
void CConnectionDialog::OnBnClickedButtonConnect()
{
// TODO: <EFBFBD><EFBFBD>0<EFBFBD><EFBFBD><EFBFBD> <EFBFBD>θ<EFBFBD>d<EFBFBD> <EFBFBD> <EFBFBD>̬<EFBFBD>0<EFBFBD> T<EFBFBD>ܴ|<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>i<EFBFBD>Ȳ<EFBFBD><EFBFBD>.
DWORD aIpAddress = 0;
TCHAR aPortNo[8] = { _T('\0'), };
{
m_IpAddress.GetAddress(aIpAddress);
m_PortNo.GetWindowText(aPortNo, _countof(aPortNo));
}
if (INADDR_ANY == aIpAddress || INADDR_NONE == aIpAddress)
{
::AfxMessageBox(_T("IP Address is not valid !"), MB_ICONERROR);
return;
}
if (0 == aPortNo)
{
::AfxMessageBox(_T("Port Number is not valid !"), MB_ICONERROR);
return;
}
ULONG nConID = ::htonl(aIpAddress);
CNetConnection* pNetConnection = CNetConnectionMgr::GetInstancePtr()->GetConnection (nConID);
if (pNetConnection) // 0<EFBFBD>t<EFBFBD><EFBFBD><EFBFBD> ȍ<EFBFBD>\<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
CNetSession* pNetSession = pNetConnection->GetSession();
if (!pNetSession)
BASE_RETURN_NONE;
DWORD dwRetVal = pNetSession->Connect(::htonl(static_cast<UINT>(aIpAddress)), static_cast<WORD>(_ttoi(aPortNo)));
if (NOERROR != dwRetVal)
BASE_RETURN_NONE;
}
else // <EFBFBD><EFBFBD>L<EFBFBD>ȍ<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
// <EFBFBD> 8֜<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>\<EFBFBD> t<EFBFBD>|<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٳi<EFBFBD>Ȳ<EFBFBD><EFBFBD>.
pNetConnection = CNetConnectionMgr::GetInstancePtr()->CreateConnection();
if (!pNetConnection)
BASE_RETURN_NONE;
CNetSession* pNetSession = pNetConnection->GetSession();
if (!pNetSession)
BASE_RETURN_NONE;
CMainFrame* pMainFrame = static_cast<CServiceMonitorApp*>(::AfxGetApp())->GetMainFrame();
if (!pMainFrame)
BASE_RETURN_NONE;
CBasePartitionView* pPartitionView = pMainFrame->AddPartition (pNetConnection, nConID);
if (!pPartitionView)
BASE_RETURN_NONE;
DWORD dwRetVal = pNetSession->Connect(::htonl(static_cast<UINT>(aIpAddress)), static_cast<WORD>(_ttoi(aPortNo)));
if (NOERROR != dwRetVal)
BASE_RETURN_NONE;
pNetSession->SetConnect(true);
// <EFBFBD>ε<EFBFBD>X<EFBFBD> D<EFBFBD>t<EFBFBD><EFBFBD> ȥ<EFBFBD>
pPartitionView->SetConnectionID(nConID);
// <EFBFBD><EFBFBD>%<EFBFBD>X<EFBFBD><EFBFBD><EFBFBD>]<EFBFBD>
CNetConnectionMgr::GetInstancePtr()->RegistConnection (pNetConnection);
}
GetDlgItem(IDC_CNNDLG_CONNECT)->EnableWindow(FALSE);
}
void CConnectionDialog::OnBnClickedButtonDisconnect()
{
// TODO: <EFBFBD><EFBFBD>0<EFBFBD><EFBFBD><EFBFBD> <EFBFBD>θ<EFBFBD>d<EFBFBD> <EFBFBD> <EFBFBD>̬<EFBFBD>0<EFBFBD> T<EFBFBD>ܴ|<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>i<EFBFBD>Ȳ<EFBFBD><EFBFBD>.
DWORD aIpAddress = 0;
TCHAR aPortNo[8] = { _T('\0'), };
{
m_IpAddress.GetAddress(aIpAddress);
m_PortNo.GetWindowText(aPortNo, _countof(aPortNo));
}
if (INADDR_ANY == aIpAddress || INADDR_NONE == aIpAddress)
{
::AfxMessageBox(_T("IP Address is not valid !"), MB_ICONERROR);
return;
}
if (0 == aPortNo)
{
::AfxMessageBox(_T("Port Number is not valid !"), MB_ICONERROR);
return;
}
ULONG nConID = ::htonl(aIpAddress);
CNetConnection* pNetConnection = CNetConnectionMgr::GetInstancePtr()->GetConnection (nConID);
if (pNetConnection) // 0<EFBFBD>t<EFBFBD><EFBFBD><EFBFBD> ȍ<EFBFBD>\<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
CNetSession* pNetSession = pNetConnection->GetSession();
if (!pNetSession)
BASE_RETURN_NONE;
if (pNetSession->IsConnect())
{
pNetSession->SetConnect(false);
pNetSession->Disconnect();
EnableButton(FALSE);
}
else
AfxMessageBox(_T("Not Connected !"), MB_ICONERROR);
}
else // <EFBFBD><EFBFBD>\<EFBFBD><EFBFBD><EFBFBD> <EFBFBD>Ȍ<EFBFBD>x<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
AfxMessageBox(_T("Not Connected !"), MB_ICONERROR);
}
}
void CConnectionDialog::OnBnClickedCnndlgCancel()
{
// TODO: <EFBFBD><EFBFBD>0<EFBFBD><EFBFBD><EFBFBD> <EFBFBD>θ<EFBFBD>d<EFBFBD> <EFBFBD> <EFBFBD>̬<EFBFBD>0<EFBFBD> T<EFBFBD>ܴ|<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>i<EFBFBD>Ȳ<EFBFBD><EFBFBD>.
CConnectionDialog::OnCancel();
}
void CConnectionDialog::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: <EFBFBD><EFBFBD>0<EFBFBD><EFBFBD><EFBFBD> T<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>̬<EFBFBD>0<EFBFBD> T<EFBFBD>ܴ|<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>i<EFBFBD>Ȳ<EFBFBD><EFBFBD>.
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD> T<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>t<EFBFBD><EFBFBD><EFBFBD><EFBFBD> CDialog::OnPaint()D<EFBFBD>(|<EFBFBD>) 8֜<EFBFBD>X<EFBFBD><EFBFBD><EFBFBD> ȹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>$<EFBFBD>.
Graphics aGraphics(dc);
aGraphics.SetSmoothingMode(SmoothingModeHighQuality);
CRect aRect;
GetClientRect(&aRect);
// Draw Title
{
// Gradient Line
{
// Title 1
{
LinearGradientBrush aBrush(
Rect(
EV_UIS_TITLELINE_1_PAD_LFT,
EV_UIS_TITLELINE_1_PAD_TOP,
EV_UIS_TITLELINE_1_WTH,
EV_UIS_TITLELINE_1_HGT
),
Color(100, 221, 221, 221),
Color(255, 120, 120, 120),
180.0f,
FALSE
);
aGraphics.FillRectangle(
&aBrush,
EV_UIS_TITLELINE_1_PAD_LFT,
EV_UIS_TITLELINE_1_PAD_TOP,
EV_UIS_TITLELINE_1_WTH - 1,
EV_UIS_TITLELINE_1_HGT
);
}
// Title 2
{
LinearGradientBrush aBrush(
Rect(
EV_UIS_TITLELINE_2_PAD_LFT,
EV_UIS_TITLELINE_2_PAD_TOP,
EV_UIS_TITLELINE_2_WTH,
EV_UIS_TITLELINE_2_HGT
),
Color(100, 221, 221, 221),
Color(255, 120, 120, 120),
180.0f,
FALSE
);
aGraphics.FillRectangle(
&aBrush,
EV_UIS_TITLELINE_2_PAD_LFT,
EV_UIS_TITLELINE_2_PAD_TOP,
EV_UIS_TITLELINE_2_WTH - 1,
EV_UIS_TITLELINE_2_HGT
);
}
}
// Draw Text
{
LOGFONT aLogFont;
::memset(&aLogFont, 0x00, sizeof(aLogFont));
_tcsncpy_s(aLogFont.lfFaceName, _T("Arial"), LF_FACESIZE);
aLogFont.lfCharSet = DEFAULT_CHARSET;
aLogFont.lfHeight = 16;
aLogFont.lfWeight = FW_ULTRABOLD;
CFont aNewFont;
VERIFY(aNewFont.CreateFontIndirect(&aLogFont));
CFont* aOldFont = dc.SelectObject(&aNewFont);
COLORREF aOldTxColor = dc.SetTextColor(RGB(255, 255, 255));
int aOldBkMode = dc.SetBkMode(TRANSPARENT);
// Title 1
{
CRect aRect(
EV_UIS_TITLELINE_1_PAD_LFT + EV_UIS_TITLETEXT_1_PAD_X,
EV_UIS_TITLELINE_1_PAD_TOP,
EV_UIS_TITLELINE_1_PAD_LFT + EV_UIS_TITLELINE_1_WTH,
EV_UIS_TITLELINE_1_PAD_TOP + EV_UIS_TITLELINE_1_HGT
);
dc.DrawText(_T("Dragon Nest"), &aRect, DT_LEFT | DT_VCENTER);
}
// Title 2
{
CRect aRect(
EV_UIS_TITLELINE_2_PAD_LFT + EV_UIS_TITLETEXT_2_PAD_X,
EV_UIS_TITLELINE_2_PAD_TOP,
EV_UIS_TITLELINE_2_PAD_LFT + EV_UIS_TITLELINE_2_WTH,
EV_UIS_TITLELINE_2_PAD_TOP + EV_UIS_TITLELINE_2_HGT
);
dc.DrawText(_T("Service Monitor"), &aRect, DT_LEFT | DT_VCENTER);
}
dc.SetTextColor(aOldTxColor);
dc.SetBkMode(aOldBkMode);
dc.SelectObject(aOldFont);
aNewFont.DeleteObject();
}
}
}
void CConnectionDialog::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
// TODO: <EFBFBD><EFBFBD>0<EFBFBD><EFBFBD><EFBFBD> T<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>̬<EFBFBD>0<EFBFBD> T<EFBFBD>ܴ|<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>i<EFBFBD>Ȳ<EFBFBD><EFBFBD>.
}
void CConnectionDialog::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: <EFBFBD><EFBFBD>0<EFBFBD><EFBFBD><EFBFBD> T<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>̬<EFBFBD>0<EFBFBD> T<EFBFBD>ܴ|<EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD>/<EFBFBD><EFBFBD><EFBFBD> 0<EFBFBD><EFBFBD><EFBFBD><EFBFBD>D<EFBFBD> 8֜<EFBFBD>i<EFBFBD>Ȳ<EFBFBD><EFBFBD>.
CDialog::OnLButtonDown(nFlags, point);
PostMessage(WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(point.x, point.y)); // WM_NCHITTEST <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> (ȹ<EFBFBD>Ƥ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD>0<EFBFBD> <EFBFBD>h<EFBFBD>)
}
void CConnectionDialog::OnClose()
{
// TODO: <EFBFBD><EFBFBD>0<EFBFBD><EFBFBD><EFBFBD> T<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>̬<EFBFBD>0<EFBFBD> T<EFBFBD>ܴ|<EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD>/<EFBFBD><EFBFBD><EFBFBD> 0<EFBFBD><EFBFBD><EFBFBD><EFBFBD>D<EFBFBD> 8֜<EFBFBD>i<EFBFBD>Ȳ<EFBFBD><EFBFBD>.
SaveConfig();
CDialog::OnClose();
}