| | |
| | | #include "Common.h" |
| | | |
| | | |
| | | #define ID_TIMER_INIT 1 |
| | | |
| | | // CPagePlcList 对话框 |
| | | |
| | | IMPLEMENT_DYNAMIC(CPagePlcList, CDialogEx) |
| | |
| | | ON_WM_DESTROY() |
| | | ON_WM_SIZE() |
| | | ON_MESSAGE(ID_MSG_TREE_CLICK_ITEM, OnTreeClickItem) |
| | | ON_WM_TIMER() |
| | | END_MESSAGE_MAP() |
| | | |
| | | |
| | |
| | | BOOL bNoPLC = m_treeCtrl.GetChildItem(nullptr) == nullptr; |
| | | m_treeCtrl.ShowWindow(bNoPLC ? SW_HIDE : SW_SHOW); |
| | | GetDlgItem(IDC_LABEL_NO_PLC)->ShowWindow(bNoPLC ? SW_SHOW : SW_HIDE); |
| | | |
| | | // 更新节点 |
| | | HTREEITEM hSelectedItem = m_treeCtrl.GetSelectedItem(); |
| | | CPLC* pSelectedPlc = nullptr; |
| | | if (hSelectedItem != NULL) { |
| | | pSelectedPlc = (CPLC*)m_treeCtrl.GetItemData(hSelectedItem); |
| | | } |
| | | theApp.m_model.notifyPtr(RX_CODE_SELECT_PLC, pSelectedPlc); |
| | | } |
| | | } |
| | | else if (RX_PLC_STATE_CHANGED == code) { |
| | | CPLC* pPlc; |
| | | if (pAny->getPtrValue("ptr", (void*&)pPlc)) { |
| | | HTREEITEM hItem = FindItem(pPlc); |
| | | if (hItem != nullptr && pPlc->isConnected()) { |
| | | m_treeCtrl.ShowItemBadgeDotMode(hItem); |
| | | } |
| | | else { |
| | | m_treeCtrl.HideItemBadge(hItem); |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | m_treeCtrl.SetBkColor(PAGE_PLC_LIST_BACKGROUND); |
| | | m_treeCtrl.SetItemHeight(50); |
| | | ReadPLCList(); |
| | | SetTimer(ID_TIMER_INIT, 200, nullptr); |
| | | |
| | | |
| | | return TRUE; // return TRUE unless you set the focus to a control |
| | | // 异常: OCX 属性页应返回 FALSE |
| | |
| | | |
| | | void CPagePlcList::ReadPLCList() |
| | | { |
| | | //m_treeCtrl.InsertItem("PLC1", nullptr, nullptr); |
| | | //m_treeCtrl.InsertItem("PLC2", nullptr, nullptr); |
| | | HTREEITEM hItemFirst = nullptr; |
| | | std::map<std::string, CPLC*>& plcs = theApp.m_model.getPlcMap(); |
| | | for (auto item : plcs) { |
| | | HTREEITEM hItem = m_treeCtrl.InsertItem(item.second->getName().c_str(), nullptr, nullptr); |
| | | m_treeCtrl.SetItemData(hItem, (DWORD_PTR)item.second); |
| | | m_treeCtrl.SetItemBadge(hItem, TREE_BADGE_BACKGROUND, TREE_BADGE_FOREGROUND); |
| | | if (item.second->isConnected()) { |
| | | m_treeCtrl.ShowItemBadgeDotMode(hItem); |
| | | } |
| | | if (hItemFirst == nullptr) { |
| | | hItemFirst = hItem; |
| | | } |
| | | } |
| | | if (!plcs.empty()) { |
| | | m_treeCtrl.ShowWindow(SW_SHOW); |
| | | GetDlgItem(IDC_LABEL_NO_PLC)->ShowWindow(SW_HIDE); |
| | | } |
| | | |
| | | if (hItemFirst != nullptr) { |
| | | m_treeCtrl.SelectItem(hItemFirst); |
| | | CPLC* pPlc = (CPLC*)m_treeCtrl.GetItemData(hItemFirst); |
| | | theApp.m_model.notifyPtr(RX_CODE_SELECT_PLC, pPlc); |
| | | } |
| | | } |
| | | |
| | | BOOL CPagePlcList::PreTranslateMessage(MSG* pMsg) |
| | |
| | | |
| | | HTREEITEM CPagePlcList::FindItem(CPLC* pPlc) |
| | | { |
| | | |
| | | HTREEITEM item = m_treeCtrl.GetChildItem(nullptr); |
| | | while (item != nullptr) { |
| | | if (m_treeCtrl.GetItemData(item) == (DWORD_PTR)pPlc) { |
| | | return item; |
| | | } |
| | | |
| | | item = m_treeCtrl.GetNextItem(item, TVGN_NEXT); |
| | | } |
| | | |
| | | return nullptr; |
| | | } |
| | | |
| | | void CPagePlcList::OnTimer(UINT_PTR nIDEvent) |
| | | { |
| | | // TODO: 在此添加消息处理程序代码和/或调用默认值 |
| | | if (ID_TIMER_INIT == nIDEvent) { |
| | | KillTimer(ID_TIMER_INIT); |
| | | ReadPLCList(); |
| | | } |
| | | |
| | | CDialogEx::OnTimer(nIDEvent); |
| | | } |