DragonNest/Server/ServiceMonitorEx/Source/MainFrm.cpp

488 lines
12 KiB
C++
Raw Permalink Normal View History

// MainFrm.cpp : implementation of the CMainFrame class
//
#include "stdafx.h"
#include "ServiceMonitor.h"
#include "MainFrm.h"
#include "BasePartitionView.h"
#include "BaseMonitorView.h"
#include "BaseInformationView.h"
#include "BaseErrorLogView.h"
#include "ConfigMngr.h"
#include "NetConnection.h"
#define DNPRJSAFE // DNPrjSafe.h <20><><EFBFBD><EFBFBD>
#include "CriticalSection.h"
#include "DNPacket.h"
#include "DNServerDef.h"
#include "DNServerPacket.h"
#include "ConnectionInfoMngr.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CMainFrame
IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
ON_WM_CREATE()
ON_WM_SIZE()
ON_COMMAND(ID_POPUP_RESTORE, &CMainFrame::OnPopupRestore)
ON_COMMAND(ID_POPUP_MINIMIZE, &CMainFrame::OnPopupMinimize)
ON_COMMAND(ID_POPUP_EXIT, &CMainFrame::OnPopupExit)
ON_COMMAND(ID_POPUP_ABOUT, &CMainFrame::OnPopupAbout)
ON_WM_CLOSE()
ON_COMMAND(ID_VIEW_TOTALSTATUSBAR, &CMainFrame::OnViewTotalStatusBar)
ON_UPDATE_COMMAND_UI(ID_VIEW_TOTALSTATUSBAR, &CMainFrame::OnUpdateViewTotalStatusBar)
ON_WM_TIMER()
ON_WM_DESTROY()
ON_COMMAND(ID_SETTING_CONNECTION, &CMainFrame::OnSettingConnection)
ON_UPDATE_COMMAND_UI(ID_SETTING_CONNECTION, &CMainFrame::OnUpdateSettingConnection)
ON_COMMAND(ID_CONTROL_CONNECTIONFROMFILE, &CMainFrame::OnConnectionFromFile)
ON_COMMAND(ID_SETTING_CONFIG, &CMainFrame::OnSettingConfig)
ON_UPDATE_COMMAND_UI(ID_SETTING_CONFIG, &CMainFrame::OnUpdateSettingConfig)
ON_COMMAND(IDC_MDB_ERRORLOGBUTTON, &CMainFrame::OnButtonErrorLog)
ON_UPDATE_COMMAND_UI(IDC_MDB_ERRORLOGBUTTON, &CMainFrame::OnUpdateButtonErrorLog)
ON_COMMAND(IDC_MDB_REFRESHWORLDINFO, &CMainFrame::OnButtonRefreshWorldInfo)
ON_UPDATE_COMMAND_UI(IDC_MDB_REFRESHWORLDINFO, &CMainFrame::OnUpdateButtonRefreshWorldInfo)
ON_WM_WINDOWPOSCHANGED()
ON_WM_GETMINMAXINFO()
END_MESSAGE_MAP()
// CMainFrame construction/destruction
CMainFrame::CMainFrame()
{
// TODO: add member initialization code here
CServiceMonitorApp* aWinApp = static_cast<CServiceMonitorApp*>(::AfxGetApp());
ASSERT(NULL != aWinApp);
aWinApp->SetMainFrame(this);
m_DoAlert = FALSE;
for (int aIndex = 0 ; EV_SBT_CNT > aIndex ; ++aIndex) {
m_TabIconTick[aIndex] = 0;
}
}
CMainFrame::~CMainFrame()
{
}
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
cs.style &= ~FWS_ADDTOTITLE; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ť<EFBFBD><C5A5>Ʈ <20≯<EFBFBD><CCB8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ÿ<><C5B8>Ʋ<EFBFBD>ٿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
cs.style &= ~(WS_HSCROLL | WS_VSCROLL);
return TRUE;
}
// CMainFrame diagnostics
#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
CFrameWnd::AssertValid();
}
void CMainFrame::Dump(CDumpContext& dc) const
{
CFrameWnd::Dump(dc);
}
#endif //_DEBUG
void CMainFrame::ToggleConnectionDialog()
{
if (!::IsWindow(m_ConnectionDialog.GetSafeHwnd())) {
m_ConnectionDialog.Create(IDD_CNNTDLG, this);
}
m_ConnectionDialog.ShowWindow((!m_ConnectionDialog.IsWindowVisible())?(SW_NORMAL):(SW_HIDE));
}
void CMainFrame::ShowConnectionDialog(int nCmdShow)
{
if (!::IsWindow(m_ConnectionDialog.GetSafeHwnd())) {
m_ConnectionDialog.Create(IDD_CNNTDLG, this);
}
m_ConnectionDialog.ShowWindow(nCmdShow);
}
void CMainFrame::ShowControlDialog(int nCmdShow)
{
}
DWORD CMainFrame::GetTickTerm(DWORD dwOldTick, DWORD dwCurTick)
{
return((dwCurTick >= dwOldTick)?(dwCurTick - dwOldTick):(ULONG_MAX - dwOldTick + dwCurTick));
}
int CMainFrame::GetActivePageIndex() const
{
return(m_PartitionTabView.GetActivePageIndex());
}
void CMainFrame::SetPageImageIndex(int pPageIndex, int pImageIndex)
{
m_PartitionTabView.SetPageImageIndex(pPageIndex, pImageIndex);
}
void CMainFrame::ForceAllTabViewActivate()
{
if (m_PartitionTabView.GetPageCount() > 0)
{
// COX3DTabViewContainer <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
int aActivePageIndex = m_PartitionTabView.GetActivePageIndex();
for (int aIndex = 0 ; m_PartitionTabView.GetPageCount() > aIndex ; ++aIndex)
m_PartitionTabView.SetActivePageIndex(aIndex);
m_PartitionTabView.SetActivePageIndex((0 <= aActivePageIndex)?(aActivePageIndex):(0));
}
}
// CMainFrame message handlers
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: <20><><EFBFBD>⿡ Ư<><C6AF>ȭ<EFBFBD><C8AD> <20>ۼ<EFBFBD> <20>ڵ带 <20>߰<EFBFBD><DFB0>մϴ<D5B4>.
CCreateContext *aCreateContext = static_cast<CCreateContext*>(lpCreateStruct->lpCreateParams);
ASSERT(NULL != aCreateContext);
CRect aRect;
GetClientRect(&aRect);
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ<EFBFBD><C4A1><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EEB0A1> <20>Ǹ<EFBFBD> <20><><EFBFBD><EFBFBD><E2BFA1> ó<><C3B3>
CenterWindow();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
{
SetIcon(::LoadIcon(::AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME)), TRUE); // ū <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SetIcon(::LoadIcon(::AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME)), FALSE); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
// Window Position
{
/*
SetWindowPlacement()
- flags
> WPF_ASYNCWINDOWPLACEMENT :
> WPF_SETMINPOSITION : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȭ<EFBFBD><EFBFBD> â<EFBFBD><EFBFBD> x, y <EFBFBD><EFBFBD>ǥ<EFBFBD><EFBFBD> ptMaxPosition <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
> WPF_RESTORETOMAXIMIZED : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȭ<EFBFBD>DZ<EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>¿<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȭ<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD>ִ<EFBFBD>ȭ <EFBFBD>Ǿ<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>.
- UINT showCmd
> SW_HIDE : â<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>ٸ<EFBFBD> â<EFBFBD><EFBFBD> Ȱ<EFBFBD><EFBFBD>ȭ<EFBFBD><EFBFBD>Ų<EFBFBD><EFBFBD>.
> SW_MINIMIZE : â<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȭ <EFBFBD><EFBFBD>Ų<EFBFBD><EFBFBD>. <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD>ٸ<EFBFBD> â<EFBFBD><EFBFBD> Ȱ<EFBFBD><EFBFBD>ȭ <EFBFBD>ȴ<EFBFBD>.
> SW_RESTORE : â<EFBFBD><EFBFBD> Ȱ<EFBFBD><EFBFBD>ȭ<EFBFBD><EFBFBD>Ų<EFBFBD><EFBFBD>. <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>Ǵ<EFBFBD> <EFBFBD>ִ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>¿<EFBFBD><EFBFBD>ٸ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>´<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>.
> SW_SHOW : <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ġ, ũ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>̰<EFBFBD> <EFBFBD>ϰ<EFBFBD> Ȱ<EFBFBD><EFBFBD>ȭ <EFBFBD><EFBFBD>Ų<EFBFBD><EFBFBD>.
> SW_SHOWMAXIMIZED : Ȱ<EFBFBD><EFBFBD>ȭ<EFBFBD>ϰ<EFBFBD> <EFBFBD>ִ<EFBFBD>ȭ <EFBFBD><EFBFBD>Ų<EFBFBD><EFBFBD>.
> SW_SHOWMINIMIZED : Ȱ<EFBFBD><EFBFBD>ȭ<EFBFBD>ϰ<EFBFBD> <EFBFBD>ּ<EFBFBD>ȭ <EFBFBD><EFBFBD>Ų<EFBFBD><EFBFBD>.
> SW_SHOWNA : â<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>´<EFBFBD><EFBFBD><EFBFBD> Ȱ<EFBFBD><EFBFBD>ȭ <EFBFBD><EFBFBD>Ų<EFBFBD><EFBFBD>.
> SW_SHOWNOACTIVATE : â<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>ֱ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>·<EFBFBD> Ȱ<EFBFBD><EFBFBD>ȭ <EFBFBD><EFBFBD>Ų<EFBFBD><EFBFBD>.
> SW_SHOWNORMAL : <EFBFBD>̴<EFBFBD> SW_RESTORE<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
*/
if (0 != CConfigMngr::GetInstancePtr()->m_WindowPlacement.rcNormalPosition.top ||
0 != CConfigMngr::GetInstancePtr()->m_WindowPlacement.rcNormalPosition.left ||
0 != CConfigMngr::GetInstancePtr()->m_WindowPlacement.rcNormalPosition.bottom ||
0 != CConfigMngr::GetInstancePtr()->m_WindowPlacement.rcNormalPosition.right
)
{
SetWindowPlacement(&CConfigMngr::GetInstancePtr()->m_WindowPlacement);
}
if (SW_MINIMIZE == CConfigMngr::GetInstancePtr()->m_WindowPlacement.showCmd ||
SW_SHOWMINIMIZED == CConfigMngr::GetInstancePtr()->m_WindowPlacement.showCmd ||
SW_FORCEMINIMIZE == CConfigMngr::GetInstancePtr()->m_WindowPlacement.showCmd
)
{
ShowWindow(SW_RESTORE);
}
if (SW_MAXIMIZE == CConfigMngr::GetInstancePtr()->m_WindowPlacement.showCmd ||
SW_SHOWMAXIMIZED == CConfigMngr::GetInstancePtr()->m_WindowPlacement.showCmd
)
{
ShowWindow(SW_SHOWMAXIMIZED);
// CFrameWnd::ActivateFrame(SW_SHOWMAXIMIZED);
}
}
// Open Connection Dialog
OnSettingConnection();
return 0;
}
CBasePartitionView* CMainFrame::AddPartition (CNetConnection* pConnection, ULONG uIpAddress)
{
CCreateContext aCreateContext;
::memset(&aCreateContext, 0, sizeof(aCreateContext));
aCreateContext.m_pNewViewClass = RUNTIME_CLASS(CMainFrame);
SOCKADDR_IN stSockAddrIn;
stSockAddrIn.sin_family = AF_INET;
stSockAddrIn.sin_addr.s_addr = uIpAddress;
WCHAR wszAddress[20];
_swprintf(wszAddress, L"%S", inet_ntoa(stSockAddrIn.sin_addr));
if (!m_PartitionTabView.AddPage(RUNTIME_CLASS(CBasePartitionView), &aCreateContext, wszAddress, EV_IML_PARTITION))
{
TRACE0("Failed to add page m_MainTabView <20><>CBasePartitionView\n");
return NULL; // fail to create
}
INT nIndex = m_PartitionTabView.GetPageCount();
if(nIndex <= 0) return NULL;
CBasePartitionView* pPartitionView = static_cast<CBasePartitionView*>(m_PartitionTabView.GetPage(nIndex - 1));
ASSERT(NULL != pPartitionView);
pPartitionView->Set(nIndex - 1);
pPartitionView->Start (pConnection);
// App<70><70> <20><>Ƽ<EFBFBD>ǰ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
CServiceMonitorApp* aWinApp = static_cast<CServiceMonitorApp*>(::AfxGetApp());
aWinApp->SetPartitionView(uIpAddress, pPartitionView);
return pPartitionView;
}
void CMainFrame::RemovePartition (CBasePartitionView* pPartition)
{
ULONG nConID = pPartition->GetConnectionID();
CNetConnectionMgr::GetInstancePtr()->RemoveConnection(nConID);
pPartition->Close ();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD> <20>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD> <20>ʾ<EFBFBD> <20>ϴ<EFBFBD> <20><><EFBFBD>´<EFBFBD>.
m_PartitionTabView.DeletePage (pPartition->GetPageIndex());
}
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpCreateStruct, CCreateContext* /*pContext*/)
{
// <20><> <20>޼<EFBFBD><DEBC><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̵<EFBFBD> <20>ϸ<EFBFBD> <20><20><> (CMainView) <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
CCreateContext *aCreateContext = static_cast<CCreateContext*>(lpCreateStruct->lpCreateParams);
ASSERT(NULL != aCreateContext);
CRect aRect;
GetClientRect(&aRect);
if (!m_PartitionTabView.Create(this, aRect,
WS_VISIBLE | WS_CHILD | TCS_FOCUSNEVER | TCS_MULTILINE | TCS_FIXEDWIDTH | TCS_HOTTRACK,
AFX_IDW_PANE_FIRST
))
{
TRACE0("Failed to create tabview container m_MainTabView\n");
return -1; // fail to create
}
m_PartitionTabView.SetOffsetExternal(0); // <20><> <20><><EFBFBD><EFBFBD> <20>θ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_PartitionTabView.SetOffsetInternal(0); // <20><> <20><><EFBFBD><EFBFBD> <20>ڽ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
m_PartitionTabView.SetActivePageIndex(0);
return TRUE;
}
void CMainFrame::OnSize(UINT nType, int cx, int cy)
{
CFrameWnd::OnSize(nType, cx, cy);
// TODO: <20><><EFBFBD><20>޽<EFBFBD><DEBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20>ڵ带 <20>߰<EFBFBD><DFB0>մϴ<D5B4>.
if(SIZE_MINIMIZED == nType)
ShowWindow(SW_MINIMIZE);
}
void CMainFrame::OnPopupRestore()
{
// TODO: <20><><EFBFBD><20><><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20>ڵ带 <20>߰<EFBFBD><DFB0>մϴ<D5B4>.
SetForegroundWindow();
PostMessage(WM_SYSCOMMAND, SC_RESTORE);
ShowWindow(SW_SHOW);
}
void CMainFrame::OnPopupMinimize()
{
ShowWindow(SW_SHOWMINIMIZED);
}
void CMainFrame::OnPopupExit()
{
// TODO: <20><><EFBFBD><20><><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20>ڵ带 <20>߰<EFBFBD><DFB0>մϴ<D5B4>.
PostMessage(WM_CLOSE);
}
void CMainFrame::OnPopupAbout()
{
// TODO: <20><><EFBFBD><20><><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20>ڵ带 <20>߰<EFBFBD><DFB0>մϴ<D5B4>.
PostMessage(WM_COMMAND, ID_APP_ABOUT);
}
void CMainFrame::OnClose()
{
// TODO: <20><><EFBFBD><20>޽<EFBFBD><DEBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20>ڵ带 <20>߰<EFBFBD> <20><>/<2F>Ǵ<EFBFBD> <20><EFBFBD><E2BABB><EFBFBD><EFBFBD> ȣ<><C8A3><EFBFBD>մϴ<D5B4>.
if (IDYES != ::AfxMessageBox(_T("Are you sure to quit ?"), MB_ICONQUESTION | MB_YESNO)) {
return;
}
// Save Config
{
{
}
// Window Position
{
GetWindowPlacement(&CConfigMngr::GetInstancePtr()->m_WindowPlacement);
CConfigMngr::GetInstancePtr()->Flush();
}
}
CFrameWnd::OnClose();
}
void CMainFrame::OnViewTotalStatusBar()
{
// TODO: <20><><EFBFBD><20><><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20>ڵ带 <20>߰<EFBFBD><DFB0>մϴ<D5B4>.
}
void CMainFrame::OnUpdateViewTotalStatusBar(CCmdUI *pCmdUI)
{
// TODO: <20><><EFBFBD><20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ UI ó<><C3B3><EFBFBD><EFBFBD> <20>ڵ带 <20>߰<EFBFBD><DFB0>մϴ<D5B4>.
}
void CMainFrame::OnSettingConnection()
{
// TODO: <20><><EFBFBD><20><><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20>ڵ带 <20>߰<EFBFBD><DFB0>մϴ<D5B4>.
ToggleConnectionDialog();
}
void CMainFrame::OnConnectionFromFile()
{
CConnectionInfoMngr::GetInstancePtr()->ConnectToServerManager();
}
void CMainFrame::OnUpdateSettingConnection(CCmdUI *pCmdUI)
{
// TODO: <20><><EFBFBD><20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ UI ó<><C3B3><EFBFBD><EFBFBD> <20>ڵ带 <20>߰<EFBFBD><DFB0>մϴ<D5B4>.
pCmdUI->SetCheck(::IsWindow(m_ConnectionDialog.GetSafeHwnd()) && m_ConnectionDialog.IsWindowVisible());
}
void CMainFrame::OnSettingConfig()
{
// TODO: <20><><EFBFBD><20><><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20>ڵ带 <20>߰<EFBFBD><DFB0>մϴ<D5B4>.
}
void CMainFrame::OnUpdateSettingConfig(CCmdUI *pCmdUI)
{
// TODO: <20><><EFBFBD><20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ UI ó<><C3B3><EFBFBD><EFBFBD> <20>ڵ带 <20>߰<EFBFBD><DFB0>մϴ<D5B4>.
pCmdUI->Enable(FALSE); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// pCmdUI->SetCheck(::IsWindow(m_ControlDialog.GetSafeHwnd()) && m_ControlDialog.IsWindowVisible()); // <20>׽<EFBFBD>Ʈ - <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD><C7BE><EFBFBD> <20><> !!!
}
void CMainFrame::OnTimer(UINT_PTR nIDEvent)
{
// TODO: <20><><EFBFBD><20>޽<EFBFBD><DEBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20>ڵ带 <20>߰<EFBFBD> <20><>/<2F>Ǵ<EFBFBD> <20><EFBFBD><E2BABB><EFBFBD><EFBFBD> ȣ<><C8A3><EFBFBD>մϴ<D5B4>.
CFrameWnd::OnTimer(nIDEvent);
}
void CMainFrame::OnDestroy()
{
CFrameWnd::OnDestroy();
// TODO: <20><><EFBFBD><20>޽<EFBFBD><DEBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20>ڵ带 <20>߰<EFBFBD><DFB0>մϴ<D5B4>.
KillTimer(EV_TMD_REFRESHSERVICESTATUS);
}
void CMainFrame::OnWindowPosChanged(WINDOWPOS* lpwndpos)
{
CFrameWnd::OnWindowPosChanged(lpwndpos);
// TODO: <20><><EFBFBD><20>޽<EFBFBD><DEBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20>ڵ带 <20>߰<EFBFBD><DFB0>մϴ<D5B4>.
if (lpwndpos->flags & SWP_SHOWWINDOW) {
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
ForceAllTabViewActivate(); // COX3DTabViewContainer <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
}
if (lpwndpos->flags & SWP_HIDEWINDOW) {
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
}
}
BOOL CMainFrame::PreTranslateMessage(MSG* pMsg)
{
// TODO: <20><><EFBFBD>⿡ Ư<><C6AF>ȭ<EFBFBD><C8AD> <20>ڵ带 <20>߰<EFBFBD> <20><>/<2F>Ǵ<EFBFBD> <20>⺻ Ŭ<><C5AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȣ<><C8A3><EFBFBD>մϴ<D5B4>.
return CFrameWnd::PreTranslateMessage(pMsg);
}
void CMainFrame::OnButtonErrorLog()
{
// TODO: <20><><EFBFBD><20><><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20>ڵ带 <20>߰<EFBFBD><DFB0>մϴ<D5B4>.
}
void CMainFrame::OnUpdateButtonErrorLog(CCmdUI *pCmdUI)
{
// TODO: <20><><EFBFBD><20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ UI ó<><C3B3><EFBFBD><EFBFBD> <20>ڵ带 <20>߰<EFBFBD><DFB0>մϴ<D5B4>.
pCmdUI->Enable(TRUE);
}
void CMainFrame::OnButtonRefreshWorldInfo()
{
// TODO: <20><><EFBFBD><20><><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20>ڵ带 <20>߰<EFBFBD><DFB0>մϴ<D5B4>.
}
void CMainFrame::OnUpdateButtonRefreshWorldInfo(CCmdUI *pCmdUI)
{
// TODO: <20><><EFBFBD><20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ UI ó<><C3B3><EFBFBD><EFBFBD> <20>ڵ带 <20>߰<EFBFBD><DFB0>մϴ<D5B4>.
}