// 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 Á¦¿Ü #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(::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; // ÇöÀç ºä¿Í ¿¬°áµÈ µµÅ¥¸àÆ® À̸§À» ÇÁ·¹ÀÓ Å¸ÀÌÆ²¹Ù¿¡ Ãâ·ÂÇÏÁö ¾ÊÀ½ 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 Àá±è ¹æÁö 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: ¿©±â¿¡ Ư¼öÈ­µÈ ÀÛ¼º Äڵ带 Ãß°¡ÇÕ´Ï´Ù. CCreateContext *aCreateContext = static_cast(lpCreateStruct->lpCreateParams); ASSERT(NULL != aCreateContext); CRect aRect; GetClientRect(&aRect); // ÃßÈÄ À©µµ¿ì À§Ä¡»óÅ ÀúÀåÀÌ µé¾î°¡°Ô µÇ¸é ¿©±â¿¡¼­ ó¸® CenterWindow(); // ¾ÆÀÌÄÜ ¼³Á¤ { SetIcon(::LoadIcon(::AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME)), TRUE); // Å« ¾ÆÀÌÄÜ SetIcon(::LoadIcon(::AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME)), FALSE); // ÀÛÀº ¾ÆÀÌÄÜ } // Window Position { /* SetWindowPlacement() - flags > WPF_ASYNCWINDOWPLACEMENT : > WPF_SETMINPOSITION : ¾ÆÀÌÄÜÈ­µÈ âÀÇ x, y ÁÂÇ¥°¡ ptMaxPosition ¸â¹ö¿¡ ÁöÁ¤µÇ¾î ÀÖÀ½. > WPF_RESTORETOMAXIMIZED : ¾ÆÀÌÄÜÈ­µÇ±â Àü »óÅ¿¡ °ü°è¾øÀÌ È­¸éº¹±Í ½Ã ÃÖ´ëÈ­ µÇ¾î¾ß ÇÔ. - UINT showCmd > SW_HIDE : âÀ» ¼û±â°í ´Ù¸¥ âÀ» Ȱ¼ºÈ­½ÃŲ´Ù. > SW_MINIMIZE : âÀ» ¾ÆÀÌÄÜÈ­ ½ÃŲ´Ù. ÀÌ ¶§ ´Ù¸¥ âÀÌ È°¼ºÈ­ µÈ´Ù. > SW_RESTORE : âÀ» Ȱ¼ºÈ­½ÃŲ´Ù. ±× Àü¿¡ ¾ÆÀÌÄÜ ¶Ç´Â ÃÖ´ë »óÅ¿´´Ù¸é ¿ø·¡ »óÅ´ë·Î º¹¿øµÈ´Ù. > SW_SHOW : ÀÌÀü À§Ä¡, Å©±â´ë·Î º¸ÀÌ°Ô Çϰí Ȱ¼ºÈ­ ½ÃŲ´Ù. > SW_SHOWMAXIMIZED : Ȱ¼ºÈ­Çϰí ÃÖ´ëÈ­ ½ÃŲ´Ù. > SW_SHOWMINIMIZED : Ȱ¼ºÈ­Çϰí ÃÖ¼ÒÈ­ ½ÃŲ´Ù. > SW_SHOWNA : âÀ» ÇöÀç »óÅ´ë·Î Ȱ¼ºÈ­ ½ÃŲ´Ù. > SW_SHOWNOACTIVATE : âÀ» °¡Àå ÃÖ±Ù »óÅ·ΠȰ¼ºÈ­ ½ÃŲ´Ù. > SW_SHOWNORMAL : ÀÌ´Â SW_RESTORE¿Í °°À½. */ 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 ¡çCBasePartitionView\n"); return NULL; // fail to create } INT nIndex = m_PartitionTabView.GetPageCount(); if(nIndex <= 0) return NULL; CBasePartitionView* pPartitionView = static_cast(m_PartitionTabView.GetPage(nIndex - 1)); ASSERT(NULL != pPartitionView); pPartitionView->Set(nIndex - 1); pPartitionView->Start (pConnection); // App¿¡ ÆÄƼ¼Ç°ú ¼¼¼Ç µî·Ï CServiceMonitorApp* aWinApp = static_cast(::AfxGetApp()); aWinApp->SetPartitionView(uIpAddress, pPartitionView); return pPartitionView; } void CMainFrame::RemovePartition (CBasePartitionView* pPartition) { ULONG nConID = pPartition->GetConnectionID(); CNetConnectionMgr::GetInstancePtr()->RemoveConnection(nConID); pPartition->Close (); // ÆäÀÌÁö À妽º°¡ ÀÚµ¿Á¤·ÄµÇÁö ¾Ê¾Æ ÀÏ´Ü ¸·´Â´Ù. m_PartitionTabView.DeletePage (pPartition->GetPageIndex()); } BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpCreateStruct, CCreateContext* /*pContext*/) { // º» ¸Þ¼­µå¸¦ ¿À¹ö¶óÀ̵ù ÇÏ¸é ±âº» ºä (CMainView) ¸¦ »ý¼º ¾ÊÇÔ CCreateContext *aCreateContext = static_cast(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); // ÅÇ ºä¿Í ºÎ¸ð ÇÁ·¹ÀÓ »çÀÌÀÇ °£°Ý m_PartitionTabView.SetOffsetInternal(0); // ÅÇ ºä¿Í ÀÚ½Ä ºä¿Í »çÀÌÀÇ °£°Ý m_PartitionTabView.SetActivePageIndex(0); return TRUE; } void CMainFrame::OnSize(UINT nType, int cx, int cy) { CFrameWnd::OnSize(nType, cx, cy); // TODO: ¿©±â¿¡ ¸Þ½ÃÁö 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. if(SIZE_MINIMIZED == nType) ShowWindow(SW_MINIMIZE); } void CMainFrame::OnPopupRestore() { // TODO: ¿©±â¿¡ ¸í·É 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. SetForegroundWindow(); PostMessage(WM_SYSCOMMAND, SC_RESTORE); ShowWindow(SW_SHOW); } void CMainFrame::OnPopupMinimize() { ShowWindow(SW_SHOWMINIMIZED); } void CMainFrame::OnPopupExit() { // TODO: ¿©±â¿¡ ¸í·É 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. PostMessage(WM_CLOSE); } void CMainFrame::OnPopupAbout() { // TODO: ¿©±â¿¡ ¸í·É 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. PostMessage(WM_COMMAND, ID_APP_ABOUT); } void CMainFrame::OnClose() { // TODO: ¿©±â¿¡ ¸Þ½ÃÁö 󸮱â Äڵ带 Ãß°¡ ¹×/¶Ç´Â ±âº»°ªÀ» È£ÃâÇÕ´Ï´Ù. 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: ¿©±â¿¡ ¸í·É 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. } void CMainFrame::OnUpdateViewTotalStatusBar(CCmdUI *pCmdUI) { // TODO: ¿©±â¿¡ ¸í·É ¾÷µ¥ÀÌÆ® UI 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. } void CMainFrame::OnSettingConnection() { // TODO: ¿©±â¿¡ ¸í·É 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. ToggleConnectionDialog(); } void CMainFrame::OnConnectionFromFile() { CConnectionInfoMngr::GetInstancePtr()->ConnectToServerManager(); } void CMainFrame::OnUpdateSettingConnection(CCmdUI *pCmdUI) { // TODO: ¿©±â¿¡ ¸í·É ¾÷µ¥ÀÌÆ® UI 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. pCmdUI->SetCheck(::IsWindow(m_ConnectionDialog.GetSafeHwnd()) && m_ConnectionDialog.IsWindowVisible()); } void CMainFrame::OnSettingConfig() { // TODO: ¿©±â¿¡ ¸í·É 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. } void CMainFrame::OnUpdateSettingConfig(CCmdUI *pCmdUI) { // TODO: ¿©±â¿¡ ¸í·É ¾÷µ¥ÀÌÆ® UI 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. pCmdUI->Enable(FALSE); // ÇöÀç ¹ÌÁö¿ø // pCmdUI->SetCheck(::IsWindow(m_ControlDialog.GetSafeHwnd()) && m_ControlDialog.IsWindowVisible()); // Å×½ºÆ® - »èÁ¦µÇ¾î¾ß ÇÔ !!! } void CMainFrame::OnTimer(UINT_PTR nIDEvent) { // TODO: ¿©±â¿¡ ¸Þ½ÃÁö 󸮱â Äڵ带 Ãß°¡ ¹×/¶Ç´Â ±âº»°ªÀ» È£ÃâÇÕ´Ï´Ù. CFrameWnd::OnTimer(nIDEvent); } void CMainFrame::OnDestroy() { CFrameWnd::OnDestroy(); // TODO: ¿©±â¿¡ ¸Þ½ÃÁö 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. KillTimer(EV_TMD_REFRESHSERVICESTATUS); } void CMainFrame::OnWindowPosChanged(WINDOWPOS* lpwndpos) { CFrameWnd::OnWindowPosChanged(lpwndpos); // TODO: ¿©±â¿¡ ¸Þ½ÃÁö 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. if (lpwndpos->flags & SWP_SHOWWINDOW) { // À©µµ¿ì º¸ÀÓ ½Ã ÅëÁö ForceAllTabViewActivate(); // COX3DTabViewContainer Àá±è ¹æÁö } if (lpwndpos->flags & SWP_HIDEWINDOW) { // À©µµ¿ì ¼û±è ½Ã ÅëÁö } } BOOL CMainFrame::PreTranslateMessage(MSG* pMsg) { // TODO: ¿©±â¿¡ Ư¼öÈ­µÈ Äڵ带 Ãß°¡ ¹×/¶Ç´Â ±âº» Ŭ·¡½º¸¦ È£ÃâÇÕ´Ï´Ù. return CFrameWnd::PreTranslateMessage(pMsg); } void CMainFrame::OnButtonErrorLog() { // TODO: ¿©±â¿¡ ¸í·É 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. } void CMainFrame::OnUpdateButtonErrorLog(CCmdUI *pCmdUI) { // TODO: ¿©±â¿¡ ¸í·É ¾÷µ¥ÀÌÆ® UI 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. pCmdUI->Enable(TRUE); } void CMainFrame::OnButtonRefreshWorldInfo() { // TODO: ¿©±â¿¡ ¸í·É 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. } void CMainFrame::OnUpdateButtonRefreshWorldInfo(CCmdUI *pCmdUI) { // TODO: ¿©±â¿¡ ¸í·É ¾÷µ¥ÀÌÆ® UI 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. }