DlgService.cpp 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290
  1. // DlgService.cpp: 实现文件
  2. //
  3. #include "stdafx.h"
  4. #include "SATHelper.h"
  5. #include "DlgService.h"
  6. #include "afxdialogex.h"
  7. #include "SATClient.h"
  8. //#include "SATProtocol.h"
  9. // CDlgService 对话框
  10. IMPLEMENT_DYNAMIC(CDlgService, CDialogEx)
  11. CDlgService::CDlgService(CWnd* pParent /*=nullptr*/)
  12. : CDialogEx(IDD_DLG_SERVICE, pParent)
  13. {
  14. }
  15. CDlgService::~CDlgService()
  16. {
  17. }
  18. void CDlgService::DoDataExchange(CDataExchange* pDX)
  19. {
  20. CDialogEx::DoDataExchange(pDX);
  21. DDX_Control(pDX, IDC_LIST_DEVICES, m_listDevices);
  22. DDX_Control(pDX, IDC_LIST_TASK, m_listTask);
  23. DDX_Control(pDX, BTN_MODIFY_RUNNER_NAME, m_btnModify);
  24. DDX_Control(pDX, BTN_ADD_ANDROID, m_btnAddAndroid);
  25. }
  26. BEGIN_MESSAGE_MAP(CDlgService, CDialogEx)
  27. ON_WM_PAINT()
  28. ON_WM_CTLCOLOR()
  29. ON_BN_CLICKED(BTN_MODIFY_RUNNER_NAME, &CDlgService::OnBnClickedModifyRunnerName)
  30. ON_BN_CLICKED(BTN_ADD_ANDROID, &CDlgService::OnBnClickedAddAndroid)
  31. ON_WM_TIMER()
  32. END_MESSAGE_MAP()
  33. // CDlgService 消息处理程序
  34. BOOL CDlgService::OnInitDialog()
  35. {
  36. CDialogEx::OnInitDialog();
  37. // TODO: 在此添加额外的初始化
  38. // 做为子窗口,这里设置透明度没有任何效果;
  39. // SetLayeredWindowAttributes(RGB(1, 2, 3), 0, LWA_COLORKEY/*|LWA_ALPHA*/);
  40. InitCtrl();
  41. FillData2Ctrl();
  42. #if 0
  43. // 5秒刷新一次;
  44. SetTimer(0, 5000, NULL);
  45. SetTimer(1, 10000, NULL);
  46. #else
  47. std::thread t([](CDlgService *p) {
  48. while (true)
  49. {
  50. std::this_thread::sleep_for(std::chrono::milliseconds(1500));
  51. {
  52. CSATClient::GetInstance()->TCPQueryDevices(FALSE);
  53. int nIndex = 0;
  54. TCHAR szValue[MAX_PATH] = { 0 };
  55. p->m_listDevices.DeleteAllItems();
  56. for (std::vector<SATPROTO::Device>::iterator it = SATData::devices.begin(); it != SATData::devices.end(); it++) {
  57. _itoa_s(nIndex, szValue, 10);
  58. p->m_listDevices.InsertItem(nIndex, szValue);
  59. if (it->nType == 0)
  60. p->m_listDevices.SetItemText(nIndex, 1, "虚拟");
  61. else if (it->nType == 1)
  62. p->m_listDevices.SetItemText(nIndex, 1, "USB");
  63. else if (it->nType == 2)
  64. p->m_listDevices.SetItemText(nIndex, 1, "网络");
  65. p->m_listDevices.SetItemText(nIndex, 2, it->szName);
  66. if (it->nStatus == 0)
  67. p->m_listDevices.SetItemText(nIndex, 3, "在线");
  68. else if (it->nStatus == 1)
  69. p->m_listDevices.SetItemText(nIndex, 3, "离线");
  70. else if ( it->nStatus == 2 )
  71. p->m_listDevices.SetItemText(nIndex, 3, "掉线");
  72. if (it->nUsageState == 0)
  73. p->m_listDevices.SetItemText(nIndex, 4, "空闲");
  74. else if (it->nUsageState == 1)
  75. p->m_listDevices.SetItemText(nIndex, 4, "繁忙");
  76. nIndex++;
  77. }
  78. }
  79. std::this_thread::sleep_for(std::chrono::milliseconds(1500));
  80. {
  81. CSATClient::GetInstance()->TCPQueryTasks(FALSE);
  82. int nIndex = 0;
  83. p->m_listTask.DeleteAllItems();
  84. TCHAR szValue[MAX_PATH] = { 0 };
  85. for (int i = 0; i < SATData::task_resp.nSize; i++) {
  86. // 任务No;
  87. _itoa_s(SATData::task_resp.ssTasks[i].nTaskId, szValue, 10);
  88. p->m_listTask.InsertItem(nIndex, szValue);
  89. p->m_listTask.SetItemText(nIndex, 1, SATData::task_resp.ssTasks[i].szTaskNo);
  90. p->m_listTask.SetItemText(nIndex, 2, SATData::task_resp.ssTasks[i].szTaskName);
  91. if (SATData::task_resp.ssTasks[i].nStatus == 0)
  92. p->m_listTask.SetItemText(nIndex, 3, "未执行");
  93. else if (SATData::task_resp.ssTasks[i].nStatus == 1)
  94. p->m_listTask.SetItemText(nIndex, 3, "执行中");
  95. else if (SATData::task_resp.ssTasks[i].nStatus == 2)
  96. p->m_listTask.SetItemText(nIndex, 3, "完成");
  97. nIndex++;
  98. }
  99. }
  100. }
  101. },this);
  102. t.detach();
  103. #endif
  104. return TRUE; // return TRUE unless you set the focus to a control
  105. // 异常: OCX 属性页应返回 FALSE
  106. }
  107. void CDlgService::OnPaint()
  108. {
  109. CPaintDC dc(this); // device context for painting
  110. // TODO: 在此处添加消息处理程序代码
  111. // 不为绘图消息调用 CDialogEx::OnPaint()
  112. CRect rc;
  113. GetClientRect(rc);
  114. CBrush brush;
  115. brush.CreateSolidBrush(0xFFEFD5);
  116. dc.FillRect(&rc, &brush);
  117. }
  118. HBRUSH CDlgService::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
  119. {
  120. HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);
  121. // TODO: 在此更改 DC 的任何特性
  122. if (nCtlColor == CTLCOLOR_STATIC)
  123. {
  124. pDC->SetBkMode(TRANSPARENT);//设置背景透明
  125. //pDC->SetTextColor(RGB(255, 255, 0));//设置字体为黄色
  126. return (HBRUSH)::GetStockObject(NULL_BRUSH);
  127. }
  128. // TODO: 如果默认的不是所需画笔,则返回另一个画笔
  129. return hbr;
  130. }
  131. void CDlgService::InitCtrl()
  132. {
  133. // 初始化设备列表;
  134. m_listDevices.InsertColumn(0, "No");
  135. m_listDevices.SetColumnWidth(0, 25);
  136. m_listDevices.InsertColumn(1, "类型");
  137. m_listDevices.SetColumnWidth(1, 39);
  138. m_listDevices.InsertColumn(2, "名称");
  139. m_listDevices.SetColumnWidth(2, 125);
  140. m_listDevices.InsertColumn(3, "状态");
  141. m_listDevices.SetColumnWidth(3, 39);
  142. m_listDevices.InsertColumn(4, "使用");
  143. m_listDevices.SetColumnWidth(4, 39);
  144. m_listDevices.SetExtendedStyle(m_listDevices.GetExtendedStyle() | LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
  145. // 初始化任务列表;
  146. m_listTask.InsertColumn(0, "No");
  147. m_listTask.SetColumnWidth(0, 25);
  148. m_listTask.InsertColumn(1, "任务编号");
  149. m_listTask.SetColumnWidth(1, 130);
  150. m_listTask.InsertColumn(2, "任务名称");
  151. m_listTask.SetColumnWidth(2, 60);
  152. m_listTask.InsertColumn(3, "状态");
  153. m_listTask.SetColumnWidth(3, 55);
  154. m_listTask.SetExtendedStyle(m_listTask.GetExtendedStyle() | LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
  155. // 修改按钮默认样式;
  156. m_btnModify.m_bTransparent = FALSE;
  157. m_btnModify.m_bDontUseWinXPTheme = TRUE;
  158. // 设置背景色;
  159. m_btnModify.SetFaceColor(RGB(0x87,0xCE,0xFA), TRUE);
  160. // 消除单击时黑色内圈;
  161. m_btnModify.m_bDrawFocus = FALSE;
  162. // 设置按钮扁平样式;
  163. m_btnModify.m_nFlatStyle = CMFCButton::FlatStyle::BUTTONSTYLE_FLAT;
  164. // 设置鼠标形状;
  165. m_btnModify.SetMouseCursorHand();
  166. m_btnAddAndroid.m_bTransparent = FALSE;
  167. m_btnAddAndroid.m_bDontUseWinXPTheme = TRUE;
  168. // 设置背景色;
  169. m_btnAddAndroid.SetFaceColor(RGB(0x87, 0xCE, 0xFA), TRUE);
  170. // 消除单击时黑色内圈;
  171. m_btnAddAndroid.m_bDrawFocus = FALSE;
  172. // 设置按钮扁平样式;
  173. m_btnAddAndroid.m_nFlatStyle = CMFCButton::FlatStyle::BUTTONSTYLE_FLAT;
  174. // 设置鼠标形状;
  175. m_btnAddAndroid.SetMouseCursorHand();
  176. }
  177. void CDlgService::FillData2Ctrl()
  178. {
  179. SetDlgItemText(IDC_EDIT_RUNNER_NAME, Global::g_Config.strActuator.c_str());
  180. }
  181. void CDlgService::OnBnClickedModifyRunnerName()
  182. {
  183. // TODO: 在此添加控件通知处理程序代码
  184. CString strActuator;
  185. GetDlgItemText(IDC_EDIT_RUNNER_NAME, strActuator);
  186. Global::g_Config.strActuator = strActuator.GetString();
  187. WritePrivateProfileString(_T("SATService"), _T("Actuator"), strActuator, Global::g_szConfig);
  188. CSATClient::GetInstance()->TCPLogin(Global::g_Config.strSATUserName, Global::g_Config.strSATPassword, Global::g_Config.strActuator);
  189. }
  190. void CDlgService::OnBnClickedAddAndroid()
  191. {
  192. // TODO: 在此添加控件通知处理程序代码
  193. CIPAddressCtrl* pIP = (CIPAddressCtrl*)GetDlgItem(IDC_IP_ANDROID);
  194. // 获取IP地址;
  195. BYTE nf1, nf2, nf3, nf4;
  196. pIP->GetAddress(nf1, nf2, nf3, nf4);
  197. CString str;
  198. str.Format("%d.%d.%d.%d", nf1, nf2, nf3, nf4);//这里的nf得到的值是IP值了
  199. if (str.IsEmpty())
  200. return;
  201. CSATClient::GetInstance()->TCPAddDevice(str.GetString());
  202. }
  203. void CDlgService::OnTimer(UINT_PTR nIDEvent)
  204. {
  205. // TODO: 在此添加消息处理程序代码和/或调用默认值
  206. if (nIDEvent == 0)
  207. {
  208. CSATClient::GetInstance()->TCPQueryDevices(FALSE);
  209. int nIndex = 0;
  210. TCHAR szValue[MAX_PATH] = { 0 };
  211. m_listDevices.DeleteAllItems();
  212. for ( std::vector<SATPROTO::Device>::iterator it = SATData::devices.begin(); it != SATData::devices.end(); it++ ) {
  213. _itoa_s(nIndex, szValue, 10);
  214. m_listDevices.InsertItem(nIndex, szValue);
  215. if ( it->nType == 0 )
  216. m_listDevices.SetItemText(nIndex, 1, "虚拟");
  217. else if ( it->nType == 1 )
  218. m_listDevices.SetItemText(nIndex, 1, "USB");
  219. else if ( it->nType == 2 )
  220. m_listDevices.SetItemText(nIndex, 1, "网络");
  221. m_listDevices.SetItemText(nIndex, 2, it->szName);
  222. if ( it->nStatus == 0 )
  223. m_listDevices.SetItemText(nIndex, 3, "空闲");
  224. else
  225. m_listDevices.SetItemText(nIndex, 3, "繁忙");
  226. nIndex++;
  227. }
  228. }
  229. else if (nIDEvent == 1)
  230. {
  231. CSATClient::GetInstance()->TCPQueryTasks(FALSE);
  232. int nIndex = 0;
  233. m_listTask.DeleteAllItems();
  234. TCHAR szValue[MAX_PATH] = {0};
  235. for ( int i = 0; i < SATData::task_resp.nSize; i++ ) {
  236. // 任务No;
  237. _itoa_s(SATData::task_resp.ssTasks[i].nTaskId, szValue, 10);
  238. m_listTask.InsertItem(nIndex, szValue);
  239. m_listTask.SetItemText(nIndex, 1, SATData::task_resp.ssTasks[i].szTaskNo);
  240. m_listTask.SetItemText(nIndex, 2, SATData::task_resp.ssTasks[i].szTaskName);
  241. if (SATData::task_resp.ssTasks[i].nStatus == 0)
  242. m_listTask.SetItemText(nIndex, 3, "未执行");
  243. else if ( SATData::task_resp.ssTasks[i].nStatus == 1 )
  244. m_listTask.SetItemText(nIndex, 3, "执行中");
  245. else if (SATData::task_resp.ssTasks[i].nStatus == 2)
  246. m_listTask.SetItemText(nIndex, 3, "完成");
  247. nIndex++;
  248. }
  249. }
  250. CDialogEx::OnTimer(nIDEvent);
  251. }