| | |
| | | #include "afxdialogex.h" |
| | | #include "Common.h" |
| | | #include "Log.h" |
| | | #include "SecsTestDlg.h" |
| | | |
| | | |
| | | #ifdef _DEBUG |
| | |
| | | #define INDICATE_VACUUM_BAKE 11 |
| | | #define INDICATE_BAKE_COOLING 12 |
| | | #define INDICATE_MEASUREMENT 13 |
| | | |
| | | |
| | | /* 创建终端的定时器 */ |
| | | #define TIMER_ID_CREATE_TERMINAL 1 |
| | | |
| | | |
| | | // 用于应用程序“关于”菜单项的 CAboutDlg 对话框 |
| | |
| | | m_hbrBkgnd = nullptr; |
| | | m_bShowLogWnd = FALSE; |
| | | m_pLogDlg = nullptr; |
| | | m_pTerminalDisplayDlg = nullptr; |
| | | m_pObserver = nullptr; |
| | | } |
| | | |
| | | void CServoDlg::DoDataExchange(CDataExchange* pDX) |
| | |
| | | ON_MESSAGE(ID_MSG_LOGDLG_HIDE, &CServoDlg::OnLogDlgHide) |
| | | ON_WM_MOVING() |
| | | ON_WM_MOVE() |
| | | ON_COMMAND(ID_MENU_FILE_EXIT, &CServoDlg::OnMenuFileExit) |
| | | ON_UPDATE_COMMAND_UI(ID_MENU_FILE_EXIT, &CServoDlg::OnUpdateMenuFileExit) |
| | | ON_COMMAND(ID_MENU_FILE_SETTINGS, &CServoDlg::OnMenuFileSettings) |
| | | ON_UPDATE_COMMAND_UI(ID_MENU_FILE_SETTINGS, &CServoDlg::OnUpdateMenuFileSettings) |
| | | ON_COMMAND(ID_MENU_FILE_SECSTEST, &CServoDlg::OnMenuFileSecsTest) |
| | | ON_UPDATE_COMMAND_UI(ID_MENU_FILE_SECSTEST, &CServoDlg::OnUpdateMenuFileSecsTest) |
| | | ON_COMMAND(ID_MENU_WND_LOG, &CServoDlg::OnMenuWndLog) |
| | | ON_UPDATE_COMMAND_UI(ID_MENU_WND_LOG, &CServoDlg::OnUpdateMenuWndLog) |
| | | ON_COMMAND(ID_MENU_HELP_ABOUT, &CServoDlg::OnMenuHelpAbout) |
| | | ON_WM_INITMENUPOPUP() |
| | | ON_WM_TIMER() |
| | | END_MESSAGE_MAP() |
| | | |
| | | |
| | | // CServoDlg 消息处理程序 |
| | | |
| | | void CServoDlg::InitRxWindows() |
| | | { |
| | | /* code */ |
| | | // 订阅数据 |
| | | IRxWindows* pRxWindows = RX_GetRxWindows(); |
| | | pRxWindows->enableLog(5); |
| | | if (m_pObserver == NULL) { |
| | | m_pObserver = pRxWindows->allocObserver([&](IAny* pAny) -> void { |
| | | // onNext |
| | | pAny->addRef(); |
| | | int code = pAny->getCode(); |
| | | if (RX_HSMS_TERMINAL_TEXT == code) { |
| | | const char* pszText; |
| | | if (pAny->getStringValue("text", pszText)) { |
| | | ShowTerminalText(pszText); |
| | | } |
| | | } |
| | | pAny->release(); |
| | | }, [&]() -> void { |
| | | // onComplete |
| | | }, [&](IThrowable* pThrowable) -> void { |
| | | // onErrorm |
| | | pThrowable->printf(); |
| | | }); |
| | | |
| | | theApp.m_model.getObservable()->observeOn(pRxWindows->mainThread()) |
| | | ->subscribe(m_pObserver); |
| | | } |
| | | } |
| | | |
| | | BOOL CServoDlg::OnInitDialog() |
| | | { |
| | |
| | | // 执行此操作 |
| | | SetIcon(m_hIcon, TRUE); // 设置大图标 |
| | | SetIcon(m_hIcon, FALSE); // 设置小图标 |
| | | |
| | | |
| | | // 菜单 |
| | | CMenu menu; |
| | | menu.LoadMenu(IDR_MENU_APP); |
| | | SetMenu(&menu); |
| | | |
| | | |
| | | |
| | | // ͼʾ |
| | |
| | | theApp.m_model.init(); |
| | | |
| | | |
| | | SetTimer(TIMER_ID_CREATE_TERMINAL, 3000, nullptr); |
| | | InitRxWindows(); |
| | | UpdateLogBtn(); |
| | | Resize(); |
| | | return TRUE; // 除非将焦点设置到控件,否则返回 TRUE |
| | |
| | | return static_cast<HCURSOR>(m_hIcon); |
| | | } |
| | | |
| | | void CServoDlg::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 CServoDlg::OnMenuFileSettings() |
| | | { |
| | | |
| | | } |
| | | |
| | | void CServoDlg::OnUpdateMenuFileSettings(CCmdUI* pCmdUI) |
| | | { |
| | | pCmdUI->Enable(TRUE); |
| | | } |
| | | |
| | | void CServoDlg::OnMenuFileSecsTest() |
| | | { |
| | | CSecsTestDlg dlg; |
| | | dlg.DoModal(); |
| | | } |
| | | |
| | | void CServoDlg::OnUpdateMenuFileSecsTest(CCmdUI* pCmdUI) |
| | | { |
| | | pCmdUI->Enable(TRUE); |
| | | } |
| | | |
| | | void CServoDlg::OnMenuWndLog() |
| | | { |
| | | OnBnClickedButtonLog(); |
| | | } |
| | | |
| | | void CServoDlg::OnUpdateMenuWndLog(CCmdUI* pCmdUI) |
| | | { |
| | | pCmdUI->SetCheck(m_bShowLogWnd); |
| | | } |
| | | |
| | | void CServoDlg::OnMenuFileExit() |
| | | { |
| | | PostMessage(WM_CLOSE); |
| | | } |
| | | |
| | | void CServoDlg::OnUpdateMenuFileExit(CCmdUI* pCmdUI) |
| | | { |
| | | pCmdUI->Enable(TRUE); |
| | | } |
| | | |
| | | void CServoDlg::OnMenuHelpAbout() |
| | | { |
| | | CAboutDlg dlgAbout; |
| | | dlgAbout.DoModal(); |
| | | } |
| | | |
| | | void CServoDlg::OnBnClickedOk() |
| | | { |
| | |
| | | delete m_pLogDlg; |
| | | m_pLogDlg = nullptr; |
| | | } |
| | | if (m_pTerminalDisplayDlg != nullptr) { |
| | | m_pTerminalDisplayDlg->DestroyWindow(); |
| | | delete m_pTerminalDisplayDlg; |
| | | m_pTerminalDisplayDlg = nullptr; |
| | | } |
| | | |
| | | if (m_hbrBkgnd != nullptr) { |
| | | ::DeleteObject(m_hbrBkgnd); |
| | | } |
| | | |
| | | if (m_pObserver != nullptr) { |
| | | m_pObserver->unsubscribe(); |
| | | m_pObserver = NULL; |
| | | } |
| | | |
| | | } |
| | | |
| | | void CServoDlg::OnBnClickedButtonLog() |
| | |
| | | } |
| | | ASSERT(m_pLogDlg); |
| | | m_pLogDlg->ShowWindow(m_bShowLogWnd ? SW_SHOW : SW_HIDE); |
| | | LOGE("OnBnClickedButtonLog"); |
| | | |
| | | UpdateLogBtn(); |
| | | } |
| | |
| | | |
| | | CDialogEx::OnMove(x, y); |
| | | } |
| | | |
| | | void CServoDlg::ShowTerminalText(const char* pszText, unsigned int duration/* = -1*/) |
| | | { |
| | | ASSERT(m_pTerminalDisplayDlg); |
| | | m_pTerminalDisplayDlg->ShowText(pszText, duration); |
| | | } |
| | | |
| | | void CServoDlg::OnTimer(UINT_PTR nIDEvent) |
| | | { |
| | | if (TIMER_ID_CREATE_TERMINAL == nIDEvent) { |
| | | // 预先创建终端窗口 |
| | | KillTimer(TIMER_ID_CREATE_TERMINAL); |
| | | char szBuffer[MAX_PATH]; |
| | | sprintf_s(szBuffer, MAX_PATH, "%s\\RES\\TeminalMsg.html", (LPTSTR)(LPCTSTR)theApp.m_strAppDir); |
| | | m_pTerminalDisplayDlg = new CTerminalDisplayDlg(); |
| | | m_pTerminalDisplayDlg->SetTemplateHtml(szBuffer); |
| | | m_pTerminalDisplayDlg->Create(IDD_DIALOG_TERMINAL_DISPLAY, this); |
| | | } |
| | | |
| | | CDialogEx::OnTimer(nIDEvent); |
| | | } |