ToolDialog.cpp 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484
  1. // ToolDialog.cpp : 实现文件
  2. //
  3. #include "stdafx.h"
  4. #include "GetInt.h"
  5. #include "ToolDialog.h"
  6. #include "afxdialogex.h"
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #endif
  10. // CToolDialog 对话框
  11. IMPLEMENT_DYNAMIC(CToolDialog, CBCGPDialog)
  12. CToolDialog::CToolDialog(CWnd* pParent /*=NULL*/)
  13. : CBCGPDialog(IDD_DIALOG, pParent)
  14. , m_Value(0)
  15. , m_nHigh(99)
  16. , m_nLow(0)
  17. , m_nTime(1000)
  18. {
  19. EnableVisualManagerStyle(TRUE, TRUE);
  20. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  21. m_nViaueMode = 0;
  22. }
  23. void CToolDialog::DoDataExchange(CDataExchange* pDX)
  24. {
  25. CBCGPDialog::DoDataExchange(pDX);
  26. DDX_Control(pDX, IDC_TOOLBAR_LOCATION, m_wndToolbarLocation);
  27. DDX_Text(pDX, IDC_EDIT_VALUE, m_Value);
  28. DDX_Text(pDX, IDC_EDIT1, m_nHigh);
  29. DDV_MinMaxInt(pDX, m_nHigh, -999999, 999999);
  30. DDX_Text(pDX, IDC_EDIT2, m_nLow);
  31. DDV_MinMaxInt(pDX, m_nLow, -999999, 999999);
  32. DDX_Control(pDX, IDC_EDIT_VALUE, m_wndValve);
  33. DDX_Text(pDX, IDC_EDIT3, m_nTime);
  34. DDV_MinMaxInt(pDX, m_nTime, 10, 1000);
  35. }
  36. BEGIN_MESSAGE_MAP(CToolDialog, CBCGPDialog)
  37. ON_WM_SYSCOMMAND()
  38. ON_WM_PAINT()
  39. ON_WM_QUERYDRAGICON()
  40. ON_BN_CLICKED(IDOK, &CToolDialog::OnBnClickedOk)
  41. ON_BN_CLICKED(IDC_MAIN_EXECUTE, &CToolDialog::onExecute)
  42. ON_BN_CLICKED(IDC_MAIN_UPDATE, &CToolDialog::onUpdate)
  43. ON_WM_TIMER()
  44. ON_BN_CLICKED(IDC_RADIO1, &CToolDialog::OnBnClickedRadio1)
  45. ON_BN_CLICKED(IDC_RADIO2, &CToolDialog::OnBnClickedRadio2)
  46. ON_BN_CLICKED(IDC_RADIO3, &CToolDialog::OnBnClickedRadio3)
  47. ON_BN_CLICKED(IDC_RADIO4, &CToolDialog::OnBnClickedRadio4)
  48. ON_BN_CLICKED(IDC_RADIO5, &CToolDialog::OnBnClickedRadio5)
  49. END_MESSAGE_MAP()
  50. // CToolDialog 消息处理程序
  51. BOOL CToolDialog::OnInitDialog()
  52. {
  53. CBCGPDialog::OnInitDialog();
  54. // 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动
  55. // 执行此操作
  56. SetIcon(m_hIcon, TRUE); // 设置大图标
  57. SetIcon(m_hIcon, FALSE); // 设置小图标
  58. // Create toolbar:
  59. m_wndToolBar.Create(this);
  60. m_wndToolBar.SetControlVisualMode(this);
  61. m_wndToolBar.LoadToolBar(IDR_MAINFRAME, 0, 0, TRUE /* Locked bar */, 0, 0, IDB_TOOLBAR_HC);
  62. m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() |
  63. CBRS_TOOLTIPS | CBRS_FLYBY);
  64. m_wndToolBar.SetBarStyle(
  65. m_wndToolBar.GetBarStyle() &
  66. ~(CBRS_GRIPPER | CBRS_BORDER_TOP | CBRS_BORDER_BOTTOM | CBRS_BORDER_LEFT | CBRS_BORDER_RIGHT));
  67. CSize sizeToolBar = m_wndToolBar.CalcFixedLayout(FALSE, TRUE);
  68. // Set ToolBar position and size:
  69. CRect rectToolBar;
  70. m_wndToolbarLocation.GetWindowRect(&rectToolBar);
  71. ScreenToClient(&rectToolBar);
  72. m_wndToolBar.SetWindowPos(&wndTop, rectToolBar.left, rectToolBar.top,
  73. sizeToolBar.cx, sizeToolBar.cy, SWP_NOACTIVATE);
  74. // m_wndToolBar.SetOwner (m_pMenuFrame);
  75. // All commands will be routed via this dialog, not via the parent frame:
  76. m_wndToolBar.SetRouteCommandsViaFrame(FALSE);
  77. // TODO: 在此添加额外的初始化代码
  78. ((CButton *)GetDlgItem(IDC_RADIO1))->SetCheck(TRUE);//选上
  79. SetTimer(1, 1000, NULL);
  80. return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
  81. }
  82. void CToolDialog::OnSysCommand(UINT nID, LPARAM lParam)
  83. {
  84. CBCGPDialog::OnSysCommand(nID, lParam);
  85. }
  86. // 如果向对话框添加最小化按钮,则需要下面的代码
  87. // 来绘制该图标。 对于使用文档/视图模型的 MFC 应用程序,
  88. // 这将由框架自动完成。
  89. void CToolDialog::OnPaint()
  90. {
  91. if (IsIconic())
  92. {
  93. CPaintDC dc(this); // 用于绘制的设备上下文
  94. SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
  95. // 使图标在工作区矩形中居中
  96. int cxIcon = GetSystemMetrics(SM_CXICON);
  97. int cyIcon = GetSystemMetrics(SM_CYICON);
  98. CRect rect;
  99. GetClientRect(&rect);
  100. int x = (rect.Width() - cxIcon + 1) / 2;
  101. int y = (rect.Height() - cyIcon + 1) / 2;
  102. // 绘制图标
  103. dc.DrawIcon(x, y, m_hIcon);
  104. }
  105. else
  106. {
  107. CBCGPDialog::OnPaint();
  108. }
  109. }
  110. //当用户拖动最小化窗口时系统调用此函数取得光标
  111. //显示。
  112. HCURSOR CToolDialog::OnQueryDragIcon()
  113. {
  114. return static_cast<HCURSOR>(m_hIcon);
  115. }
  116. void CToolDialog::OnBnClickedOk()
  117. {
  118. UpdateData(TRUE);
  119. SetTimer(1, m_nTime, NULL);
  120. CBCGPDialog::OnOK();
  121. }
  122. void CToolDialog::onExecute()
  123. {
  124. try
  125. {
  126. this->execOnExecuteCallBack(m_strToolName);
  127. }
  128. catch (...)
  129. {
  130. execLogCallBack(MSG_WAY::_ERROR, _T("onExecute Error..."));
  131. }
  132. }
  133. void CToolDialog::onUpdate()
  134. {
  135. //设置元素名列表
  136. UpdateData(TRUE);
  137. SetTimer(1, m_nTime, NULL);
  138. }
  139. void CToolDialog::Running(bool bRun)
  140. {
  141. }
  142. void CToolDialog::Serialize(CArchive& ar)
  143. {
  144. int paranum;//参数数量
  145. if (ar.IsStoring())//保存参数流程
  146. { // storing code
  147. paranum = 6;
  148. ar << paranum;//先保存参数数量
  149. //将枚举类型强制转换为int
  150. ar << (int)0 << m_Value;
  151. ar << (int)1 << m_nHigh;
  152. ar << (int)2 << m_nLow;
  153. ar << (int)3 << m_nTime;
  154. ar << (int)4 << m_Value;
  155. ar << (int)5 << m_nViaueMode;
  156. }
  157. else//加载参数流程,参数加载顺序一定要跟保存顺序一致
  158. { // loading code
  159. {
  160. int para;
  161. ar >> paranum;//读取参数数量
  162. for (int i = 0; i < paranum; i++)
  163. {
  164. ar >> para;
  165. switch (para)
  166. {
  167. case 0: ar >> m_Value; break;
  168. case 1: ar >> m_nHigh; break;
  169. case 2: ar >> m_nLow; break;
  170. case 3: ar >> m_nTime; break;
  171. case 4: ar >> m_Value; break;
  172. case 5: ar >> m_nViaueMode; break;
  173. default:
  174. {
  175. execLogCallBack(MSG_WAY::_ERROR, _T("配置文档错误!"));
  176. }
  177. break;
  178. }
  179. }
  180. SetTimer(1, m_nTime, NULL);
  181. }
  182. switch (m_nViaueMode)
  183. {
  184. case 0:
  185. {
  186. ((CButton *)GetDlgItem(IDC_RADIO1))->SetCheck(TRUE);//选上
  187. ((CButton *)GetDlgItem(IDC_RADIO2))->SetCheck(FALSE);//不选上
  188. ((CButton *)GetDlgItem(IDC_RADIO3))->SetCheck(FALSE);//不选上
  189. ((CButton *)GetDlgItem(IDC_RADIO4))->SetCheck(FALSE);//不选上
  190. ((CButton *)GetDlgItem(IDC_RADIO5))->SetCheck(FALSE);//不选上
  191. }
  192. break;
  193. case 1:
  194. {
  195. ((CButton *)GetDlgItem(IDC_RADIO1))->SetCheck(FALSE);//选上
  196. ((CButton *)GetDlgItem(IDC_RADIO2))->SetCheck(TRUE);//不选上
  197. ((CButton *)GetDlgItem(IDC_RADIO3))->SetCheck(FALSE);//不选上
  198. ((CButton *)GetDlgItem(IDC_RADIO4))->SetCheck(FALSE);//不选上
  199. ((CButton *)GetDlgItem(IDC_RADIO5))->SetCheck(FALSE);//不选上
  200. }
  201. break;
  202. case 2:
  203. {
  204. ((CButton *)GetDlgItem(IDC_RADIO1))->SetCheck(FALSE);//选上
  205. ((CButton *)GetDlgItem(IDC_RADIO2))->SetCheck(FALSE);//不选上
  206. ((CButton *)GetDlgItem(IDC_RADIO3))->SetCheck(TRUE);//不选上
  207. ((CButton *)GetDlgItem(IDC_RADIO4))->SetCheck(FALSE);//不选上
  208. ((CButton *)GetDlgItem(IDC_RADIO5))->SetCheck(FALSE);//不选上
  209. }
  210. break;
  211. case 3:
  212. {
  213. ((CButton *)GetDlgItem(IDC_RADIO1))->SetCheck(FALSE);//选上
  214. ((CButton *)GetDlgItem(IDC_RADIO2))->SetCheck(FALSE);//不选上
  215. ((CButton *)GetDlgItem(IDC_RADIO3))->SetCheck(FALSE);//不选上
  216. ((CButton *)GetDlgItem(IDC_RADIO4))->SetCheck(TRUE);//不选上
  217. ((CButton *)GetDlgItem(IDC_RADIO5))->SetCheck(FALSE);//不选上
  218. }
  219. break;
  220. case 4:
  221. {
  222. ((CButton *)GetDlgItem(IDC_RADIO1))->SetCheck(FALSE);//选上
  223. ((CButton *)GetDlgItem(IDC_RADIO2))->SetCheck(FALSE);//不选上
  224. ((CButton *)GetDlgItem(IDC_RADIO3))->SetCheck(FALSE);//不选上
  225. ((CButton *)GetDlgItem(IDC_RADIO4))->SetCheck(FALSE);//不选上
  226. ((CButton *)GetDlgItem(IDC_RADIO5))->SetCheck(TRUE);//不选上
  227. m_Value = 0;
  228. }
  229. break;
  230. default:
  231. break;
  232. }
  233. UpdateData(FALSE);
  234. }
  235. }
  236. EVEN CToolDialog::GetEvent()
  237. {
  238. m_Even.hEvenHandle = NULL;
  239. //如该工具不启用事件功能,请注释以下语句
  240. m_Even.hEvenHandle = CreateEventW(NULL, TRUE, FALSE, NULL);
  241. //在需要的地方用以下语句设置事件和手动复位
  242. // SetEvent(m_Even.hEvenHandle);
  243. // ResetEvent(m_Even.hEvenHandle);
  244. return m_Even;
  245. }
  246. int CToolDialog::Execute()
  247. {
  248. if (m_nViaueMode != 4)
  249. {
  250. EVEN m_Even = this->m_Even;
  251. if (m_Even.hEvenHandle != NULL)
  252. {
  253. DWORD dw = WaitForSingleObject(m_Even.hEvenHandle, m_Even.nEvenTime);//等待重置事件
  254. if (dw == WAIT_TIMEOUT)
  255. {
  256. return RT_TIMEOUT;
  257. }
  258. }
  259. ResetEvent(m_Even.hEvenHandle);
  260. m_Value1 = (int)m_Value;
  261. }
  262. else
  263. {
  264. DWORD t = timeGetTime();
  265. CString str;
  266. str.Format(_T("%u"), t);
  267. str = str.Mid(4);
  268. double a = _tcstod(str, 0);
  269. m_Value1 = (float)a;
  270. m_Value = (int)m_Value1;
  271. str.Format(_T("%.0f"), m_Value1);
  272. m_wndValve.SetWindowTextW(str);
  273. }
  274. m_hvTestValue = HTuple();
  275. m_hvTestValue[0] = m_Value1;
  276. m_hvTestValue[1] = 22222;
  277. m_hvTestValue[2] = 99999;
  278. return 0;
  279. }
  280. void CToolDialog::execToolStateCallBack(int nState)
  281. {
  282. if (m_pReceToolStateFunction != NULL)
  283. {
  284. m_pReceToolStateFunction(m_strToolName, nState, m_ToolStateUserParam);
  285. }
  286. }
  287. void CToolDialog::execLogCallBack(MSG_WAY nType, CString strMassage)
  288. {
  289. if (m_pReceLogFunction != NULL)
  290. {
  291. m_pReceLogFunction(m_strToolName, nType, strMassage, m_LogUserParam);
  292. }
  293. }
  294. void CToolDialog::execOnExecuteCallBack(CString strToolName)
  295. {
  296. if (m_pReceOnExecuteFunction != NULL)
  297. {
  298. m_pReceOnExecuteFunction(strToolName, m_OnExecuteUserParam);
  299. }
  300. }
  301. void CToolDialog::execToolBusyCallBack(int nState, CString strMassage)
  302. {
  303. if (m_pReceToolBusyFunction != NULL)
  304. {
  305. m_pReceToolBusyFunction(m_strToolName, nState, strMassage, m_ToolStateUserParam);
  306. }
  307. }
  308. static int GenRandNumber1(const int nLow, const int nHigh)
  309. {
  310. return rand() % (nHigh - nLow + 1) + nHigh;
  311. }
  312. void CToolDialog::OnTimer(UINT_PTR nIDEvent)
  313. {
  314. // TODO: 在此添加消息处理程序代码和/或调用默认值
  315. switch (m_nViaueMode)
  316. {
  317. case 0://随机
  318. {
  319. m_Value = GenRandNumber1(m_nHigh, m_nLow);
  320. m_Value1 = m_Value;
  321. }
  322. break;
  323. case 1://累加
  324. {
  325. m_Value++;
  326. if (m_Value > m_nHigh)
  327. {
  328. m_Value = m_nLow;
  329. }
  330. m_Value1 = m_Value;
  331. }
  332. break;
  333. case 2://累减
  334. {
  335. m_Value--;
  336. if (m_Value < m_nLow)
  337. {
  338. m_Value = m_nHigh;
  339. }
  340. m_Value1 = m_Value;
  341. }
  342. break;
  343. case 3://固定
  344. {
  345. m_Value1 = m_Value;
  346. }
  347. break;
  348. default:
  349. break;
  350. }
  351. // CString str;
  352. // str.Format(_T("Vilue= %d"), m_Value);
  353. // execLogCallBack(MSG_WAY::_INFO, str);
  354. SetEvent(m_Even.hEvenHandle);
  355. //if (m_nViaueMode != 3)
  356. {
  357. CString str;
  358. str.Format(_T("%d"), m_Value);
  359. m_wndValve.SetWindowTextW(str);
  360. }
  361. //UpdateData(FALSE);
  362. CBCGPDialog::OnTimer(nIDEvent);
  363. }
  364. void CToolDialog::OnBnClickedRadio1()
  365. {
  366. // TODO: 在此添加控件通知处理程序代码
  367. m_nViaueMode = 0;
  368. }
  369. void CToolDialog::OnBnClickedRadio2()
  370. {
  371. // TODO: 在此添加控件通知处理程序代码
  372. m_nViaueMode = 1;
  373. }
  374. void CToolDialog::OnBnClickedRadio3()
  375. {
  376. // TODO: 在此添加控件通知处理程序代码
  377. m_nViaueMode = 2;
  378. }
  379. void CToolDialog::OnBnClickedRadio4()
  380. {
  381. // TODO: 在此添加控件通知处理程序代码
  382. m_nViaueMode = 3;
  383. }
  384. void CToolDialog::OnBnClickedRadio5()
  385. {
  386. // TODO: 在此添加控件通知处理程序代码
  387. m_nViaueMode = 4;
  388. }