// BoounionPLCDlg.cpp : ʵÏÖÎļþ // #include "stdafx.h" #include "BoounionPLC.h" #include "BoounionPLCDlg.h" #include "afxdialogex.h" #include "Common.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // ÓÃÓÚÓ¦ÓóÌÐò¡°¹ØÓÚ¡±²Ëµ¥ÏîµÄ CAboutDlg ¶Ô»°¿ò class CAboutDlg : public CDialogEx { public: CAboutDlg(); // ¶Ô»°¿òÊý¾Ý #ifdef AFX_DESIGN_TIME enum { IDD = IDD_ABOUTBOX }; #endif protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV Ö§³Ö // ʵÏÖ protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) END_MESSAGE_MAP() // CBoounionPLCDlg ¶Ô»°¿ò CBoounionPLCDlg::CBoounionPLCDlg(CWnd* pParent /*=NULL*/) : CDialogEx(IDD_BOOUNIONPLC_DIALOG, pParent) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); m_pTopToolbar = nullptr; m_crBkgnd = APP_MAIN_DLG_BACKGROUND; m_hbrBkgnd = nullptr; } void CBoounionPLCDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CBoounionPLCDlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_WM_DESTROY() ON_WM_SIZE() ON_WM_CTLCOLOR() ON_COMMAND(ID_MENU_FILE_EXIT, &CBoounionPLCDlg::OnMenuFileExit) ON_UPDATE_COMMAND_UI(ID_MENU_FILE_EXIT, &CBoounionPLCDlg::OnUpdateMenuFileExit) ON_COMMAND(ID_MENU_FILE_SETTINGS, &CBoounionPLCDlg::OnMenuFileSettings) ON_UPDATE_COMMAND_UI(ID_MENU_FILE_SETTINGS, &CBoounionPLCDlg::OnUpdateMenuFileSettings) ON_COMMAND(ID_MENU_HELP_ABOUT, &CBoounionPLCDlg::OnMenuHelpAbout) ON_WM_INITMENUPOPUP() ON_MESSAGE(ID_MSG_TOOLBAR_BTN_CLICKED, &CBoounionPLCDlg::OnToolbarBtnClicked) END_MESSAGE_MAP() // CBoounionPLCDlg ÏûÏ¢´¦Àí³ÌÐò BOOL CBoounionPLCDlg::OnInitDialog() { CDialogEx::OnInitDialog(); // ½«¡°¹ØÓÚ...¡±²Ëµ¥ÏîÌí¼Óµ½ÏµÍ³²Ëµ¥ÖС£ // IDM_ABOUTBOX ±ØÐëÔÚϵͳÃüÁΧÄÚ¡£ ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { BOOL bNameValid; CString strAboutMenu; bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // ÉèÖô˶Ի°¿òµÄͼ±ê¡£ µ±Ó¦ÓóÌÐòÖ÷´°¿Ú²»ÊǶԻ°¿òʱ£¬¿ò¼Ü½«×Ô¶¯ // Ö´Ðд˲Ù×÷ SetIcon(m_hIcon, TRUE); // ÉèÖôóͼ±ê SetIcon(m_hIcon, FALSE); // ÉèÖÃСͼ±ê theApp.m_model.init(); // toolbar m_pTopToolbar = new CTopToolbar(); m_pTopToolbar->Create(IDD_TOP_TOOLBAR, this); m_pTopToolbar->ShowWindow(SW_SHOW); HMENU hMenu = m_pTopToolbar->GetOperatorMenu(); ASSERT(hMenu); ::EnableMenuItem(hMenu, ID_OPEATOR_SWITCH, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); // page plc list m_pPagePlcList = new CPagePlcList(); m_pPagePlcList->Create(IDD_PAGE_PLC_LIST, this); m_pPagePlcList->ShowWindow(SW_SHOW); // ²Ëµ¥ CMenu menu; menu.LoadMenu(IDR_MENU_APP); SetMenu(&menu); ShowWindow(SW_MAXIMIZE); Resize(); return TRUE; // ³ý·Ç½«½¹µãÉèÖõ½¿Ø¼þ£¬·ñÔò·µ»Ø TRUE } void CBoounionPLCDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialogEx::OnSysCommand(nID, lParam); } } // Èç¹ûÏò¶Ô»°¿òÌí¼Ó×îС»¯°´Å¥£¬ÔòÐèÒªÏÂÃæµÄ´úÂë // À´»æÖƸÃͼ±ê¡£ ¶ÔÓÚʹÓÃÎĵµ/ÊÓͼģÐ굀 MFC Ó¦ÓóÌÐò£¬ // Õ⽫ÓÉ¿ò¼Ü×Ô¶¯Íê³É¡£ void CBoounionPLCDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // ÓÃÓÚ»æÖƵÄÉ豸ÉÏÏÂÎÄ SendMessage(WM_ICONERASEBKGND, reinterpret_cast(dc.GetSafeHdc()), 0); // ʹͼ±êÔÚ¹¤×÷Çø¾ØÐÎÖоÓÖÐ int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // »æÖÆÍ¼±ê dc.DrawIcon(x, y, m_hIcon); } else { CDialogEx::OnPaint(); } } //µ±Óû§Í϶¯×îС»¯´°¿Úʱϵͳµ÷Óô˺¯ÊýÈ¡µÃ¹â±ê //ÏÔʾ¡£ HCURSOR CBoounionPLCDlg::OnQueryDragIcon() { return static_cast(m_hIcon); } void CBoounionPLCDlg::OnInitMenuPopup(CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu) { ASSERT(pPopupMenu != NULL); CCmdUI state; state.m_pMenu = pPopupMenu; ASSERT(state.m_pOther == NULL); ASSERT(state.m_pParentMenu == NULL); HMENU hParentMenu; if (AfxGetThreadState()->m_hTrackingMenu == pPopupMenu->m_hMenu) state.m_pParentMenu = pPopupMenu; else if ((hParentMenu = ::GetMenu(m_hWnd)) != NULL) { CWnd* pParent = this; if (pParent != NULL && (hParentMenu = ::GetMenu(pParent->m_hWnd)) != NULL) { int nIndexMax = ::GetMenuItemCount(hParentMenu); for (int nIndex = 0; nIndex < nIndexMax; nIndex++) { if (::GetSubMenu(hParentMenu, nIndex) == pPopupMenu->m_hMenu) { state.m_pParentMenu = CMenu::FromHandle(hParentMenu); break; } } } } state.m_nIndexMax = pPopupMenu->GetMenuItemCount(); for (state.m_nIndex = 0; state.m_nIndex < state.m_nIndexMax; state.m_nIndex++) { state.m_nID = pPopupMenu->GetMenuItemID(state.m_nIndex); if (state.m_nID == 0) continue; ASSERT(state.m_pOther == NULL); ASSERT(state.m_pMenu != NULL); if (state.m_nID == (UINT)-1) { state.m_pSubMenu = pPopupMenu->GetSubMenu(state.m_nIndex); if (state.m_pSubMenu == NULL || (state.m_nID = state.m_pSubMenu->GetMenuItemID(0)) == 0 || state.m_nID == (UINT)-1) { continue; } state.DoUpdate(this, TRUE); } else { state.m_pSubMenu = NULL; state.DoUpdate(this, FALSE); } UINT nCount = pPopupMenu->GetMenuItemCount(); if (nCount < state.m_nIndexMax) { state.m_nIndex -= (state.m_nIndexMax - nCount); while (state.m_nIndex < nCount && pPopupMenu->GetMenuItemID(state.m_nIndex) == state.m_nID) { state.m_nIndex++; } } state.m_nIndexMax = nCount; } } void CBoounionPLCDlg::OnDestroy() { CDialogEx::OnDestroy(); if (m_pTopToolbar != nullptr) { m_pTopToolbar->DestroyWindow(); delete m_pTopToolbar; m_pTopToolbar = nullptr; } if (m_pPagePlcList != nullptr) { m_pPagePlcList->DestroyWindow(); delete m_pPagePlcList; m_pPagePlcList = nullptr; } if (m_hbrBkgnd != nullptr) { ::DeleteObject(m_hbrBkgnd); m_hbrBkgnd = nullptr; } } void CBoounionPLCDlg::OnSize(UINT nType, int cx, int cy) { CDialogEx::OnSize(nType, cx, cy); if (m_pTopToolbar == nullptr || !::IsWindow(m_pTopToolbar->m_hWnd)) return; Resize(); } #define TOOLBAR_HEIGHT 78 #define PAGE_PLC_LIST_WIDTH 218 void CBoounionPLCDlg::Resize() { CRect rcClient, rcItem; GetClientRect(&rcClient); int y = 0; m_pTopToolbar->MoveWindow(0, 0, rcClient.Width(), TOOLBAR_HEIGHT); y += TOOLBAR_HEIGHT; m_pPagePlcList->MoveWindow(0, y, PAGE_PLC_LIST_WIDTH, rcClient.Height() - y - 2); } HBRUSH CBoounionPLCDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor); if (nCtlColor == CTLCOLOR_STATIC) { pDC->SetBkColor(m_crBkgnd); } if (m_hbrBkgnd == nullptr) { m_hbrBkgnd = CreateSolidBrush(m_crBkgnd); } return m_hbrBkgnd; } void CBoounionPLCDlg::OnMenuFileSettings() { //CSettingsDlg dlg; //dlg.DoModal(); } void CBoounionPLCDlg::OnUpdateMenuFileSettings(CCmdUI* pCmdUI) { pCmdUI->Enable(FALSE); } void CBoounionPLCDlg::OnMenuFileExit() { PostMessage(WM_CLOSE); } void CBoounionPLCDlg::OnUpdateMenuFileExit(CCmdUI* pCmdUI) { pCmdUI->Enable(TRUE); } void CBoounionPLCDlg::OnMenuHelpAbout() { CAboutDlg dlgAbout; dlgAbout.DoModal(); } LRESULT CBoounionPLCDlg::OnToolbarBtnClicked(WPARAM wParam, LPARAM lParam) { int id = (int)lParam; if (id == IDC_BUTTON_ADD) { static int i = 0; char szName[256]; sprintf_s(szName, 256, "PLC%d", ++i); theApp.m_model.addPlc(szName, "192.168.1.188", 1001); } else if (id == IDC_BUTTON_DELETE) { static int i = 0; i += 2; char szName[256]; sprintf_s(szName, 256, "PLC%d", i); theApp.m_model.removePlc(szName); } else if (id == IDC_BUTTON_SETTINGS) { } else if (id == IDC_BUTTON_OPERATOR) { /* int menuId = (int)wParam; UserManager& userManager = UserManager::getInstance(); if (menuId == 0) { CLoginDlg loginDlg; loginDlg.DoModal(); } else if (1 == menuId) { CChangePasswordDlg changePasswordDlg; changePasswordDlg.DoModal(); } else if (2 == menuId) { CUserManagerDlg dlg; if (dlg.DoModal() != IDOK) { logManager.log(SystemLogManager::LogType::Operation, _T("Óû§¹ÜÀíµÄÔ¤²Ù×÷±»È¡Ïû£¡")); } } else if (3 == menuId) { CSystemLogManagerDlg dlg; dlg.DoModal(); } else if (4 == menuId) { int ret = AfxMessageBox(_T("ÊÇ·ñÇл»Óû§£¿Çл»Óû§»áÍ˳öµ±Ç°Õ˺ţ¡"), MB_OKCANCEL | MB_ICONEXCLAMATION); if (ret != IDOK) { return 0; } logManager.log(SystemLogManager::LogType::Operation, _T("È·ÈÏÇл»½ÇÉ«£¡")); if (userManager.isLoggedIn()) { logManager.log(SystemLogManager::LogType::Info, _T("Í˳öµÇ¼£¡")); userManager.logout(); } CLoginDlg loginDlg; loginDlg.DoModal(); } else { CString cstrMessage; cstrMessage.Format(_T("ÊÇ·ñÍ˳öÓû§ [%s]£¿"), userManager.getCurrentUser().c_str()); int ret = AfxMessageBox(_T(cstrMessage), MB_OKCANCEL | MB_ICONEXCLAMATION); if (ret != IDOK) { return 0; } logManager.log(SystemLogManager::LogType::Info, _T("Í˳öµÇ¼£¡")); userManager.logout(); } UpdateLoginStatus(); */ } return 0; }