1. 视图类,废话少说,看看带注释的源码
2. #include "stdafx.h"
3. #include "robot.h"
4. #include"Label.h"
5.
6. #include "robotDoc.h"
7. #include "robotView.h"
8.
9. #ifdef _DEBUG
10. #define new DEBUG_NEW
11. #undef THIS_FILE
12. static char
13. #endif
14.
15. /
16. // CRobotView
17.
18. IMPLEMENT_DYNCREATE(CRobotView, CFormView)
19.
20. BEGIN_MESSAGE_MAP(CRobotView, CFormView)
21. //{{AFX_MSG_MAP(CRobotView)
22. ON_WM_CTLCOLOR()
23. ON_WM_TIMER()
24. //}}AFX_MSG_MAP
25. ON_MESSAGE(WM_COMMNOTIFY, OnCommNotify)
26. END_MESSAGE_MAP()
27.
28. /
29. // CRobotView construction/destruction
30.
31. CRobotView::CRobotView()
32. : CFormView(CRobotView::IDD)
33. {
34. //{{AFX_DATA_INIT(CRobotView)
35. //}}AFX_DATA_INIT
36. // TODO: add construction code here
37. m_ncomand1=10;
38. m_bflag=0;
39. m_nsudu=1;
40. m_ngzq=0;
41. m_nguanjie;
42. m_nfangxiang;
43. m_nmsg[0]=0;
44. m_njishu=0;
45. m_nmsg[1]=0;
46. m_nmsg[2]=0;
47. m_nmsg[3]=0;
48. m_nmsg[4]=0;
49. m_nsum=0;
50. m_ndelay=0;
51. nLength=0;
52. m_recflag=1;
53. m_failflag=1;
54. // 生成一绿色刷子
55.
56. }
57.
58. CRobotView::~CRobotView()
59. {
60. }
61.
62. void
63. {
64. CFormView::DoDataExchange(pDX);
65. //{{AFX_DATA_MAP(CRobotView)
66. //DDX_Control(pDX, IDC_EDIT1, m_edit1);
67. DDX_Control(pDX, IDC_STATIC_LINK, m_link);
68. DDX_Control(pDX, IDC_STATIC_1, m_ml);
69. DDX_Control(pDX, IDC_STATIC_4, m_workpart);
70. DDX_Control(pDX, IDC_STATIC_COMMAND, m_command);
71. DDX_Control(pDX, IDC_STATIC_STATUS, m_static);
72. DDX_Control(pDX, IDC_STATIC_BUCHANG, m_buchangshu);
73. DDX_Control(pDX, IDC_STATIC_5, m_buchang);
74. DDX_Control(pDX, IDC_STATIC_3, m_sudu);
75. DDX_Control(pDX, IDC_STATIC_2, m_zhuangtai);
76. //}}AFX_DATA_MAP
77. }
78.
79. BOOL
80. {
81. // TODO: Modify the Window class or styles here by modifying
82. // the CREATESTRUCT cs
83.
84. return
85. }
86.
87.
88.
89. /
90. // CRobotView diagnostics
91.
92. #ifdef _DEBUG
93. void CRobotView::AssertValid() const
94. {
95. CFormView::AssertValid();
96. }
97.
98. void CRobotView::Dump(CDumpContext& dc) const
99. {
100. CFormView::Dump(dc);
101. }
102.
103. CRobotDoc* CRobotView::GetDocument() // non-debug version is inline
104. {
105. ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CRobotDoc)));
106. return
107. }
108. #endif //_DEBUG
109.
110. /
111. // CRobotView message handlers
112.
113. void
114. {
115. // TODO: Add your specialized code here and/or call the base class
116. SuduDisplay(m_nsudu);
117. GzqDisplay(m_ngzq);
118. }
119.
120. void
121. {
122. CFormView::OnInitialUpdate();
123.
124. // TODO: Add your specialized code here and/or call the base class
125. m_link.SetLink(TRUE)
126. .SetTextColor(RGB(0,0,255))
127. .SetFontUnderline(TRUE)
128. .SetLinkCursor(AfxGetApp()->LoadCursor(IDC_ICON1));
129. m_command.SetFontSize(24)
130. "Terminal")
131. .SetTextColor(RGB(240,240,40));
132. m_static.SetFontSize(24)
133. .SetTextColor(RGB(240,240,40));
134. m_workpart.SetFontSize(24)
135. .SetFontBold(TRUE)
136. .SetTextColor(RGB(0,240,0));
137. m_buchangshu.SetFontSize(24)
138. .SetTextColor(RGB(240,240,40));
139. m_buchang.SetFontSize(24)
140. .SetFontBold(TRUE)
141. .SetTextColor(RGB(0,240,0));
142. m_sudu.SetFontSize(24)
143. .SetFontBold(TRUE)
144. .SetTextColor(RGB(0,240,0));
145. m_zhuangtai.SetFontSize(24)
146. .SetFontBold(TRUE)
147. .SetTextColor(RGB(0,240,0));
148. m_ml.SetFontSize(24)
149. .SetLinkCursor(AfxGetApp()->LoadCursor(IDC_ICON1))
150. .SetFontBold(TRUE)
151. .SetTextColor(RGB(0,240,0));
152. GetParentFrame()->RecalcLayout();
153. ResizeParentToFit();
154. }
155.
156. LRESULT CRobotView::WindowProc(UINT message, WPARAM wParam, LPARAM
157. {
158. // TODO: Add your specialized code here and/or call the base class
159. if(message == (WM_USER + 1002))
160. ProcessMessage(wParam, lParam);
161. else if(message==(WM_USER+1003))
162. ProcessMyMessage();
163. return
164. }
165. void CRobotView::ProcessMessage(WPARAM wParam, LPARAM
166. {
167.
168. CRobotDoc* pDoc=GetDocument();
169. char* l[57] = {"零","一","二",///012
170. "三","四","五","六","七","八","九","执行","各关节归零","大臂正转",///12
171. "大臂反转","小臂正转","小臂反转","手腕正转","手腕反转","手爪张开","手爪闭合","上升","下降","大臂运行",///13--22
172. "大臂负运行","小臂运行","小臂负运行","手腕运行","手腕负运行","手爪运行","手爪负运行","升降运行",23---30
173. "升降负运行","大臂归零","小臂归零","手腕归零","手爪归零","升降归零","速度加","原点记忆",///31---38
174. "系统复位","示教盒","","","回原点","速度减","区号加","区号减","单步再现","周期再现",///39---48
175. "连续再现","返回","继续","数据记忆","读取数据","设置串口","打开串口","关闭串口"};
176. CString strcomand;
177. CString strstatus;
178. m_recflag=1;
179. if(!pDoc->m_bConnected)
180. {
181. KillTimer(1);
182. "请先打开串口");
183. return;
184. }
185. if(wParam==100)
186. {
187. KillTimer(1);
188. if(!m_failflag)
189. {
190. CWnd* pWnd=GetDlgItem(IDC_STATIC_5);
191. "");
192. pWnd=GetDlgItem(IDC_STATIC_BUCHANG);
193. "");
194. pWnd=GetDlgItem(IDC_STATIC_COMMAND);
195. "请输入新的命令");
196. pWnd=GetDlgItem(IDC_STATIC_STATUS);
197. "执行完毕");
198. m_ncomand1=0;
199.
200. }
201. else
202. "请检查连线是否正确或下位机是否打开","通信失败",MB_ICONWARNING);
203. }
204. else if(wParam>=11&&wParam<=56)
205. {
206. m_bflag=0;
207. m_ncomand1=wParam;
208. strcomand=l[m_ncomand1];
209. CWnd* pWnd=GetDlgItem(IDC_STATIC_COMMAND);
210. pWnd->SetWindowText(strcomand);
211. pWnd=GetDlgItem(IDC_STATIC_STATUS);
212. "");
213. pWnd=GetDlgItem(IDC_STATIC_5);
214. "");
215. pWnd=GetDlgItem(IDC_STATIC_BUCHANG);
216. "");
217. m_nsum=0;
218. m_njishu=0;
219. }
220. else if(wParam>=0&&wParam<=9)
221. {
222. if(m_ncomand1>=12&&m_ncomand1<=21)
223. {
224. m_bflag=1;
225. m_nmsg[m_njishu]=wParam;
226. //pWnd=GetDlgItem(IDC_STATIC_COMMAND);
227. //pWnd->SetWindowText(strcomand);
228. CWnd* pWnd=GetDlgItem(IDC_STATIC_5);
229. "步长:");
230. ++m_njishu;
231. if(m_njishu==1)
232. {
233. CString m_stemp;
234. m_nsum=m_nmsg[0];
235. "%d",m_nsum);
236. pWnd=GetDlgItem(IDC_STATIC_BUCHANG);
237. pWnd->SetWindowText(m_stemp);
238. }
239. if(m_njishu==2)
240. {
241. CString m_stemp;
242. m_nsum=m_nmsg[0]*10+m_nmsg[1];
243. "%d",m_nsum);
244. pWnd=GetDlgItem(IDC_STATIC_BUCHANG);
245. pWnd->SetWindowText(m_stemp);
246. }
247. if(m_njishu==3)
248. {
249. CString m_stemp;
250. m_nsum=m_nmsg[0]*100+m_nmsg[1]*10+m_nmsg[2];
251. //m_nmsg[0]=0;
252. //m_nmsg[1]=0
253. // m_nmsg[2]=0;
254. // m_njishu=0;
255. "%d",m_nsum);
256. pWnd=GetDlgItem(IDC_STATIC_BUCHANG);
257. pWnd->SetWindowText(m_stemp);
258. }
259. if(m_njishu==4)
260. {
261. CString m_stemp;
262. m_nsum=m_nmsg[0]*1000+m_nmsg[1]*100+m_nmsg[2]*10+m_nmsg[3];
263. "%d",m_nsum);
264. pWnd=GetDlgItem(IDC_STATIC_BUCHANG);
265. pWnd->SetWindowText(m_stemp);
266. }
267. if(m_njishu>4)
268. {
269. m_njishu=1;
270. m_nmsg[0]=m_nmsg[4];
271. CString m_stemp;
272. m_nsum=m_nmsg[0];
273. "%d",m_nsum);
274. pWnd=GetDlgItem(IDC_STATIC_BUCHANG);
275. pWnd->SetWindowText(m_stemp);
276. m_nmsg[1]=0;
277. m_nmsg[2]=0;
278. m_nmsg[3]=0;
279. }
280. }
281. else
282. //MessageBox("清先输入运动步数命令");
283. }
284. else if(wParam=10)
285. { SetTimer(1,500,NULL);
286. if(m_ncomand1>=11&&m_ncomand1<=56)
287. {
288. if(!m_bflag)
289. {
290. "正在执行命令,请稍后.....";
291. CWnd* pWnd=GetDlgItem(IDC_STATIC_STATUS);
292. pWnd->SetWindowText(strstatus);
293. Execute(m_ncomand1);
294.
295. }
296. else //if(m_ncomand1>=12&&m_ncomand1<=21)
297. {
298. char
299. m_nmsg[0]=0;
300. m_nmsg[1]=0;
301. m_nmsg[2]=0;
302. m_nmsg[3]=0;
303. m_njishu=0;
304. /// CWnd* pWnd=GetDlgItem(IDC_STATIC_STATUS);
305. /// pWnd->SetWindowText("正在执行命令,请稍后.....");
306. switch(m_ncomand1)
307. {
308. case(12):
309. m_nguanjie=01;
310. m_nfangxiang=00;
311. char)(m_nsum/256);
312. char)(m_nsum-m_uhi*256);
313. m_ndelay=(m_nsum+500)/m_nsudu;
314. Execute_1(m_nguanjie,m_nfangxiang,m_uhi,m_ulo,m_ndelay);
315. break;
316. case(13):
317. m_nguanjie=0x01;
318. m_nfangxiang=0xff;
319. char)(m_nsum/256);
320. char)(m_nsum-m_uhi*256);
321. m_ndelay=(m_nsum+500)/m_nsudu;
322. Execute_1(m_nguanjie,m_nfangxiang,m_uhi,m_ulo,m_ndelay);
323. break;
324. case(14):
325. m_nguanjie=0x02;
326. m_nfangxiang=0x00;
327. char)(m_nsum/256);
328. char)(m_nsum-m_uhi*256);
329. m_ndelay=(m_nsum)/(m_nsudu*3);
330. Execute_1(m_nguanjie,m_nfangxiang,m_uhi,m_ulo,m_ndelay);
331. break;
332. case(15):
333. m_nguanjie=0x02;
334. m_nfangxiang=0xff;
335. char)(m_nsum/256);
336. char)(m_nsum-m_uhi*256);
337. m_ndelay=(m_nsum)/(m_nsudu*3);
338. Execute_1(m_nguanjie,m_nfangxiang,m_uhi,m_ulo,m_ndelay);
339. break;
340. case(16):
341. m_nguanjie=0x04;
342. m_nfangxiang=0x00;
343. char)(m_nsum/256);
344. char)(m_nsum-m_uhi*256);
345. m_ndelay=(m_nsum+500)/m_nsudu;
346. Execute_1(m_nguanjie,m_nfangxiang,m_uhi,m_ulo,m_ndelay);
347. break;
348. case(17):
349. m_nguanjie=0x04;
350. m_nfangxiang=0xff;
351. char)(m_nsum/256);
352. char)(m_nsum-m_uhi*256);
353. m_ndelay=(m_nsum+500)/m_nsudu;
354. Execute_1(m_nguanjie,m_nfangxiang,m_uhi,m_ulo,m_ndelay);
355. break;
356. case(18):
357. m_nguanjie=0x05;
358. m_nfangxiang=0x00;
359. char)(m_nsum/256);
360. char)(m_nsum-m_uhi*256);
361. m_ndelay=(m_nsum+500)/m_nsudu;
362. Execute_1(m_nguanjie,m_nfangxiang,m_uhi,m_ulo,m_ndelay);
363. break;
364. case(19):
365. m_nguanjie=0x05;
366. m_nfangxiang=0xff;
367. char)(m_nsum/256);
368. char)(m_nsum-m_uhi*256);
369. m_ndelay=(m_nsum+500)/m_nsudu;
370. Execute_1(m_nguanjie,m_nfangxiang,m_uhi,m_ulo,m_ndelay);
371. break;
372. case(20):
373. m_nguanjie=0x03;
374. m_nfangxiang=0x00;
375. char)(m_nsum/256);
376. char)(m_nsum-m_uhi*256);
377. m_ndelay=(m_nsum+500)/(m_nsudu*2);
378. Execute_1(m_nguanjie,m_nfangxiang,m_uhi,m_ulo,m_ndelay);
379. break;
380. case(21):
381. m_nguanjie=0x03;
382. m_nfangxiang=0xff;
383. char)(m_nsum/256);
384. char)(m_nsum-m_uhi*256);
385. m_ndelay=(m_nsum+500)/(m_nsudu*2);
386. Execute_1(m_nguanjie,m_nfangxiang,m_uhi,m_ulo,m_ndelay);
387. break;
388. }
389.
390. }
391. m_failflag=1;}
392. else
393. "清先输入命令");
394. }
395. else
396. "不能识别,请重新输入命令");
397. }
398. void
399. {
400. CDC *PDc=GetDC();
401. m_failflag=0;
402. switch(m_ncomand1)
403. {
404. case(37):
405. {
406. m_nsudu++;
407. if(m_nsudu==6)
408. m_nsudu=1;
409. OnDraw(PDc);
410. }
411. break;
412. case(44):
413. {
414. m_nsudu--;
415. if(m_nsudu==0)
416. m_nsudu=5;
417. OnDraw(PDc);
418. }
419. break;
420. case(45):
421. {
422. m_ngzq++;
423. if(m_ngzq==8)
424. m_ngzq=0;
425. OnDraw(PDc);
426. }
427. break;
428. case(46):
429. {
430. m_ngzq--;
431. if(m_ngzq==-1)
432. m_ngzq=7;
433. OnDraw(PDc);
434. }
435. break;
436. }
437. CWnd* pWnd=GetDlgItem(IDC_STATIC_COMMAND);
438. "请输入新的命令");
439. pWnd=GetDlgItem(IDC_STATIC_STATUS);
440. "执行完毕");
441. m_ncomand1=0;
442. //}
443. //else
444. // MessageBox("请检查连线是否正确或下位机是否打开","通信失败",MB_ICONWARNING);
445. }
446. void CRobotView::SuduDisplay(int
447. {
448. CWnd* pWnd=GetDlgItem(IDC_STATIC_SUDU);
449. CDC* pControlDC=pWnd->GetDC();
450. pWnd->Invalidate();
451. pWnd->UpdateWindow();
452. pControlDC->SelectStockObject(BLACK_BRUSH);
453. CBitmap mBit;
454. CDC MemDC;
455. MemDC.CreateCompatibleDC(NULL);
456. switch(n)
457. {
458. case
459. mBit.LoadBitmap(IDB_BMP10);
460. break;
461. case
462. mBit.LoadBitmap(IDB_BMP11);
463. break;
464. case
465. mBit.LoadBitmap(IDB_BMP12);
466. break;
467. case
468. mBit.LoadBitmap(IDB_BMP13);
469. break;
470. case
471. mBit.LoadBitmap(IDB_BMP14);
472. break;
473. case
474. mBit.LoadBitmap(IDB_BMP15);
475. break;
476. default:
477. //mBit.LoadBitmap(IDB_BMP0);
478. "error");
479. }
480. CBitmap *pOldBit=MemDC.SelectObject(&mBit);
481. pControlDC->BitBlt(0,0,900,700,&MemDC,0,0,SRCCOPY);
482. MemDC.SelectObject(pOldBit);
483. }
484. void CRobotView::GzqDisplay(int
485. {
486. CWnd* pWnd=GetDlgItem(IDC_STATIC_GONGZUOQU);
487. CDC* pControlDC=pWnd->GetDC();
488. pWnd->Invalidate();
489. pWnd->UpdateWindow();
490. pControlDC->SelectStockObject(BLACK_BRUSH);
491. CBitmap mBit;
492. CDC MemDC;
493. MemDC.CreateCompatibleDC(NULL);
494. switch(n)
495. {
496. case
497. mBit.LoadBitmap(IDB_BMP10);
498. break;
499. case
500. mBit.LoadBitmap(IDB_BMP11);
501. break;
502. case
503. mBit.LoadBitmap(IDB_BMP12);
504. break;
505. case
506. mBit.LoadBitmap(IDB_BMP13);
507. break;
508. case
509. mBit.LoadBitmap(IDB_BMP14);
510. break;
511. case
512. mBit.LoadBitmap(IDB_BMP15);
513. break;
514. case
515. mBit.LoadBitmap(IDB_BMP16);
516. break;
517. case
518. mBit.LoadBitmap(IDB_BMP17);
519. break;
520. default:
521. //mBit.LoadBitmap(IDB_BMP0);
522. "error");
523. }
524. CBitmap *pOldBit=MemDC.SelectObject(&mBit);
525. pControlDC->BitBlt(0,0,900,700,&MemDC,0,0,SRCCOPY);
526. MemDC.SelectObject(pOldBit);
527. }
528. void CRobotView::Execute(int
529. {
530. CRobotDoc* pDoc=GetDocument();
531.
532. char
533.
534. switch(n)
535. {
536. case(11):
537. home();
538. break;
539. case(12):
540. //大臂正传
541. char
542. for(int
543. pDoc->WriteComm(&send[i],1);
544. Sleep(2000/m_nsudu);
545. break;
546. }
547. case(13):
548. {
549. char
550. for(int
551. pDoc->WriteComm(&send[i],1);
552. // pDoc->ReadComm(&buf,1);
553. // if(nLength)
554. {
555. // str.Format("%d",buf);
556. // m_edit1.SetSel(-1, 0);
557. // m_edit1.ReplaceSel(str); // 向编辑视图中插入收到的字符
558. // }
559. // else
560. // MessageBox("fjdklfjsdklgjsdfkl");
561. Sleep(2000/m_nsudu);
562. break;
563. }
564. case(14)://xiaobizhengzhuan
565. {
566. char
567. for(int
568. pDoc->WriteComm(&send[i],1);
569. Sleep(2000/m_nsudu);
570. break;
571. }
572.
573. case(15)://小臂反转
574. {
575. char
576. for(int
577. pDoc->WriteComm(&send[i],1);
578. Sleep(2000/m_nsudu);
579. break;
580. }
581. case(16)://手腕正转
582. {
583. char
584. for(int
585. pDoc->WriteComm(&send[i],1);
586. Sleep(1000/m_nsudu);
587. break;
588. }
589. case(17)://shouwanfanzhuan
590. {
591. char
592. for(int
593. pDoc->WriteComm(&send[i],1);
594. Sleep(1000/m_nsudu);
595. }
596. break;
597. case(18)://shouzhuazhangkai
598. {
599. char
600. for(int
601. pDoc->WriteComm(&send[i],1);
602. Sleep(2000/m_nsudu);
603. }
604. break;
605. case(19):
606. {
607. char
608. for(int
609. pDoc->WriteComm(&send[i],1);
610. Sleep(2000/m_nsudu);
611. }
612. break;
613. case(20)://shangsheng
614. {
615. char
616. for(int
617. pDoc->WriteComm(&send[i],1);
618. Sleep(1000/m_nsudu);
619. }
620. break;
621. case(21):
622. {
623. char
624. for(int
625. pDoc->WriteComm(&send[i],1);
626. Sleep(1000/m_nsudu);
627. }
628. break;
629. /* case(22)://dabiyunxing
630. {
631. unsigned char send[3]={0x63,0x01,0x00};
632. for(int i=0;i<=2;i++)
633. pDoc->WriteComm(&send[i],1);
634. Sleep(2000);
635. }
636. break;
637. case(23):
638. {
639. unsigned char send[3]={0x63,0x01,0xff};
640. for(int i=0;i<=2;i++)
641. pDoc->WriteComm(&send[i],1);
642. Sleep(2000);
643. }
644. break;
645. case(24)://xiaobiyunxing
646. {
647. unsigned char send[3]={0x63,0x02,0x00};
648. for(int i=0;i<=2;i++)
649. pDoc->WriteComm(&send[i],1);
650. Sleep(2000);
651. }
652. break;
653. case(25):
654. {
655. unsigned char send[3]={0x63,0x02,0xff};
656. for(int i=0;i<=2;i++)
657. pDoc->WriteComm(&send[i],1);
658. Sleep(2000);
659. }
660. break;
661. case(26)://shouwanyunxing
662. {
663. unsigned char send[3]={0x63,0x04,0x00};
664. for(int i=0;i<=2;i++)
665. pDoc->WriteComm(&send[i],1);
666. Sleep(2000);
667. }
668. break;
669. case(27):
670. {
671. unsigned char send[3]={0x63,0x04,0xff};
672. for(int i=0;i<=2;i++)
673. pDoc->WriteComm(&send[i],1);
674. Sleep(2000);
675. }
676. break;
677. case(28)://shouzhuayunxing
678. {
679. unsigned char send[3]={0x63,0x05,0x00};
680. for(int i=0;i<=2;i++)
681. pDoc->WriteComm(&send[i],1);
682. Sleep(2000);
683. }
684. break;
685. case(29):
686. {
687. unsigned char send[3]={0x63,0x05,0xff};
688. for(int i=0;i<=2;i++)
689. pDoc->WriteComm(&send[i],1);
690. Sleep(2000);
691. }
692. break;
693. case(30)://shengjiangyunxing
694. {
695. unsigned char send[3]={0x63,0x03,0x00};
696. for(int i=0;i<=2;i++)
697. pDoc->WriteComm(&send[i],1);
698. Sleep(2000);
699. }
700. break;
701. case(31):
702. {
703. unsigned char send[3]={0x63,0x05,0xff};
704. for(int i=0;i<=2;i++)
705. pDoc->WriteComm(&send[i],1);
706. Sleep(2000);
707. }
708. break;
709. */
710. case(32)://dabiguiling
711. {
712. char
713. for(int
714. pDoc->WriteComm(&send[i],1);
715. Sleep(18000);
716. }
717. break;
718. case(33)://xiaobiguiling
719. {
720. char
721. for(int
722. pDoc->WriteComm(&send[i],1);
723. Sleep(15000);
724. }
725. break;
726. case(34)://shouwanguiling
727. {
728. char
729. for(int
730. pDoc->WriteComm(&send[i],1);
731. Sleep(6000);
732. }
733. break;
734. case(35)://shouzhuaguiling
735. {
736. char
737. for(int
738. pDoc->WriteComm(&send[i],1);
739. Sleep(6000);
740. }
741. break;
742. case(36)://shengjiangguiling
743. {
744. char
745. for(int
746. pDoc->WriteComm(&send[i],1);
747. Sleep(10000);
748. }
749. break;
750. case(37)://sudujia
751. {
752. send1=0xb3;
753. pDoc->WriteComm(&send1,1);
754. }
755. Sleep(1000);
756. break;
757. case(38)://yuandianjiyi
758. send1=0x73;
759. pDoc->WriteComm(&send1,1);
760. break;
761. case(39):
762. send1=0xc3;
763. pDoc->WriteComm(&send1,1);
764. break;
765. case(40):
766. send1=0xf6;
767. pDoc->WriteComm(&send1,1);
768. break;
769. case(41):
770. send1=0x83;
771. pDoc->WriteComm(&send1,1);
772. break;
773. case(42):
774. send1=0x93;
775. pDoc->WriteComm(&send1,1);
776. break;
777. case(43):
778. // {
779. // unsigned char send[2]={0x86,0x03};
780. // for(int i=0;i<=1;i++)
781. // pDoc->WriteComm(&send[i],1);
782. // Sleep(4000);
783. // }
784. send1=0x86;
785. pDoc->WriteComm(&send1,1);
786. break;
787. case(44)://sudujian
788. {
789. send1=0xe3;
790. pDoc->WriteComm(&send1,1);
791. }
792. break;
793. case(45):
794. {
795. send1=0x12;
796. pDoc->WriteComm(&send1,1);
797. }
798. break;
799. case(46):
800. {
801. send1=0x22;
802. pDoc->WriteComm(&send1,1);
803. }
804. break;
805. case(47): //danbuzaixian
806. send1=0x13;
807. pDoc->WriteComm(&send1,1);
808. Sleep(4000);
809. break;
810. case(48): //zhouqizaixian
811. send1=0x23;
812. pDoc->WriteComm(&send1,1);
813. Sleep(8000);
814. break;
815. case(49): //lianxuzaixian
816. send1=0x33;
817. pDoc->WriteComm(&send1,1);
818. break;
819. case(50):
820. //send1=0x32;
821. //pDoc->WriteComm(&send1,1);
822. break;
823. case(51):
824. break;
825. case(52):
826. send1=0x43;
827. pDoc->WriteComm(&send1,1);
828. break;
829. case(53):
830. break;
831. case(54):
832. pDoc->OnSetupcomm();
833. break;
834. case(55):
835. pDoc->OnOpencomm();
836. break;
837. default:
838. pDoc->OnClosecomm();
839. break;
840. }
841.
842. }
843. //void CRobotView::OnButton3()
844. //{
845. // TODO: Add your control notification handler code here
846. // SendMessage(WM_USER + 1002,10,0);
847. //}
848. void CRobotView::Execute_1(unsigned char a,unsigned char b,unsigned char c,unsigned char d,int
849. {
850. CRobotDoc* pDoc=GetDocument();
851. char
852. for(int
853. pDoc->WriteComm(&send[i],1);
854. Sleep(m_ndelay);
855. }
856.
857.
858. HBRUSH CRobotView::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT
859. {
860. HBRUSH
861.
862. // TODO: Change any attributes of the DC here
863. switch(nCtlColor)
864. {
865. case
866. {
867. //pDC->SetBkMode(TRANSPARENT);
868. return m_brush; //返加绿色刷子
869. }
870. case
871. {
872. //返加绿色刷子
873. // pDC->SetBkMode(TRANSPARENT);
874. return
875. }
876. }
877. // TODO: Return a different brush if the default is not desired
878. return
879. }
880. void
881. {
882. SendMessage(WM_USER+1002,32,0);
883. SendMessage(WM_USER+1002,10,0);
884. Sleep(1000);
885. SendMessage(WM_USER+1002,33,0);
886. SendMessage(WM_USER+1002,10,0);
887. Sleep(1000);
888.
889. SendMessage(WM_USER+1002,34,0);
890. SendMessage(WM_USER+1002,10,0);
891. Sleep(1000);
892. SendMessage(WM_USER+1002,35,0);
893. SendMessage(WM_USER+1002,10,0);
894. Sleep(1000);
895. SendMessage(WM_USER+1002,36,0);
896. SendMessage(WM_USER+1002,10,0);
897. Sleep(1000);
898. }
899. LRESULT CRobotView::OnCommNotify(WPARAM wParam, LPARAM
900. {
901. char
902. CWnd* pWnd=GetDlgItem(IDC_STATIC_COMMAND);
903. CString str1,str2;
904. CRobotDoc* pDoc=GetDocument();
905. m_recflag=0;
906. if(!pDoc->m_bConnected ||
907. // 是否是EV_RXCHAR事件?
908. {
909. // 允许发送下一个WM_COMMNOTIFY消息
910. return
911. }
912. nLength=pDoc->ReadComm(&buf,1);
913. if(nLength)
914. {
915. // str1.Format("%d",buf);
916. //m_edit1.SetSel(-1, 0);
917. // m_edit1.ReplaceSel(str1); // 向编辑视图中插入收到的字符
918. "正在执行命令,请稍后.....";
919. pWnd->SetWindowText(str2);
920. SendMessage(WM_USER+1003);
921. }
922. // 允许发送下一个WM_COMMNOTIFY消息
923. return
924. }
925.
926. void CRobotView::OnTimer(UINT
927. {
928. // TODO: Add your message handler code here and/or call default
929. SendMessage(WM_USER+1002,100);
930.
931. CFormView::OnTimer(nIDEvent);
932. }
文档类
1. #include "stdafx.h"
2. #include "robot.h"
3. #include"SetupDlg.h"
4. #include "robotDoc.h"
5. #ifdef _DEBUG
6. #define new DEBUG_NEW
7. #undef THIS_FILE
8. static char
9. #endif
10.
11. /
12. // CRobotDoc
13.
14. IMPLEMENT_DYNCREATE(CRobotDoc, CDocument)
15.
16. BEGIN_MESSAGE_MAP(CRobotDoc, CDocument)
17. //{{AFX_MSG_MAP(CRobotDoc)
18. ON_COMMAND(ID_SETUPCOMM, OnSetupcomm)
19. ON_COMMAND(ID_CLOSECOMM, OnClosecomm)
20. ON_COMMAND(ID_OPENCOMM, OnOpencomm)
21. ON_UPDATE_COMMAND_UI(ID_OPENCOMM, OnUpdateOpencomm)
22. ON_UPDATE_COMMAND_UI(ID_CLOSECOMM, OnUpdateClosecomm)
23. ON_COMMAND(ID_ANJIANCTRL, OnAnjianctrl)
24. ON_UPDATE_COMMAND_UI(ID_ANJIANCTRL, OnUpdateAnjianctrl)
25. ON_COMMAND(ID_VOICECTRL, OnVoicectrl)
26. ON_UPDATE_COMMAND_UI(ID_VOICECTRL, OnUpdateVoicectrl)
27. ON_COMMAND(ID_HELP, OnHelp)
28. //}}AFX_MSG_MAP
29. END_MESSAGE_MAP()
30.
31. /
32. // CRobotDoc construction/destruction
33.
34. CRobotDoc::CRobotDoc()
35. {
36. // TODO: add one-time construction code here
37. m_bConnected=FALSE;
38. m_pThread=NULL;
39. m_nBaud =244;
40. m_nDataBits = 8;
41. m_nParity = 1;
42. "COM1";
43. m_nStopBits = 0;
44. m_bctrlmodal=FALSE;
45. m_uCurrentBtn=ID_CLOSECOMM;
46. }
47.
48. CRobotDoc::~CRobotDoc()
49. {
50. if(m_bConnected)
51. CloseConnection();
52. // 删除事件句柄
53. if(m_hPostMsgEvent)
54. CloseHandle(m_hPostMsgEvent);
55. if(m_osRead.hEvent)
56. CloseHandle(m_osRead.hEvent);
57. if(m_osWrite.hEvent)
58. CloseHandle(m_osWrite.hEvent);
59. }
60.
61. BOOL
62. {
63. if
64. return
65.
66. // TODO: add reinitialization code here
67. // (SDI documents will reuse this document)
68. // 为WM_COMMNOTIFY消息创建事件对象,手工重置,初始化为有信号的
69. if((m_hPostMsgEvent=CreateEvent(NULL, TRUE, TRUE, NULL))==NULL)
70. return
71. sizeof(OVERLAPPED));
72. sizeof(OVERLAPPED));
73. // 为重叠读创建事件对象,手工重置,初始化为无信号的
74. if((m_osRead.hEvent=CreateEvent(NULL, TRUE, FALSE, NULL))==NULL)
75. return
76. // 为重叠写创建事件对象,手工重置,初始化为无信号的
77. if((m_osWrite.hEvent=CreateEvent(NULL, TRUE, FALSE, NULL))==NULL)
78. return
79. return
80. }
81.
82.
83.
84. /
85. // CRobotDoc serialization
86.
87. void
88. {
89. if
90. {
91. // TODO: add storing code here
92. }
93. else
94. {
95. // TODO: add loading code here
96. }
97. }
98.
99. /
100. // CRobotDoc diagnostics
101.
102. #ifdef _DEBUG
103. void CRobotDoc::AssertValid() const
104. {
105. CDocument::AssertValid();
106. }
107.
108. void CRobotDoc::Dump(CDumpContext& dc) const
109. {
110. CDocument::Dump(dc);
111. }
112. #endif //_DEBUG
113.
114. /
115. // CRobotDoc commands
116.
117. void
118. {
119. // TODO: Add your command handler code here
120. CSetupDlg dlg;
121. CString str;
122. dlg.m_bConnected=m_bConnected;
123. dlg.m_sPort=m_sPort;
124. "%d",m_nBaud);
125. dlg.m_sBaud=str;
126. "%d",m_nDataBits);
127. dlg.m_sDataBits=str;
128. dlg.m_nParity=m_nParity;
129. dlg.m_nStopBits=m_nStopBits;
130. //dlg.m_nFlowCtrl=m_nFlowCtrl;
131. //dlg.m_bEcho=m_bEcho;
132. // dlg.m_bNewLine=m_bNewLine;
133. if(dlg.DoModal()==IDOK)
134. {
135. m_sPort=dlg.m_sPort;
136. m_nBaud=atoi(dlg.m_sBaud);
137. m_nDataBits=atoi(dlg.m_sDataBits);
138. m_nParity=dlg.m_nParity;
139. m_nStopBits=dlg.m_nStopBits;
140. // m_nFlowCtrl=dlg.m_nFlowCtrl;
141. // m_bEcho=dlg.m_bEcho;
142. // m_bNewLine=dlg.m_bNewLine;
143. if(m_bConnected)
144. if(!ConfigConnection())
145. "Can't realize the settings!");
146. }
147. }
148.
149. void
150. {
151. // TODO: Add your command handler code here
152. m_uCurrentBtn=ID_CLOSECOMM;
153. CloseConnection();
154. }
155.
156. void
157. {
158. // TODO: Add your command handler code here
159. m_uCurrentBtn=ID_OPENCOMM;
160. if(!OpenConnection())
161. "Can't open connection");
162. }
163.
164. void
165. {
166. // TODO: Add your command update UI handler code here
167. //pCmdUI->Enable(!m_bConnected);
168. pCmdUI->SetRadio(pCmdUI->m_nID == m_uCurrentBtn);
169. }
170.
171. void
172. {
173. // TODO: Add your command update UI handler code here
174. // pCmdUI->Enable(m_bConnected);
175. pCmdUI->SetRadio(pCmdUI->m_nID == m_uCurrentBtn);
176. }
177.
178. void
179. {
180. // TODO: Add your command handler code here
181.
182. }
183.
184. void
185. {
186. // TODO: Add your command update UI handler code here
187.
188. }
189.
190. void
191. {
192. // TODO: Add your command handler code here
193. // WinExec(NULL,NULL,_T("dutty.exe"),NULL,_T("D://Program Files//Dutty//Dutty.exe"),NULL);
194. "D://Program Files//Dutty//Dutty.exe"),SW_SHOW);
195. m_bctrlmodal=TRUE;
196. //STARTUPINFO stinfo; //启动窗口的信息
197. //PROCESSINFO procinfo; //进程的信息
198. //CreateProcess(NULL,_T("dutty.exe"),NULL,NULL.FALSE, NORMAL_PRIORITY_ CLASS,NULL,NULL, &stinfo,&procinfo);
199. }
200.
201. void
202. {
203. // TODO: Add your command update UI handler code here
204. pCmdUI->Enable(!m_bctrlmodal);
205. }
206. UINT CommProc(LPVOID
207. {
208. OVERLAPPED os;
209. DWORD
210. COMSTAT ComStat;
211. DWORD
212. CRobotDoc *pDoc=(CRobotDoc*)pParam;
213. sizeof(OVERLAPPED));
214. os.hEvent=CreateEvent(NULL, TRUE, FALSE, NULL);
215. if(os.hEvent==NULL)
216. {
217. "Can't create event object!");
218. return (UINT)-1;
219. }
220. while(pDoc->m_bConnected)
221. {
222. ClearCommError(pDoc->m_hCom,&dwErrorFlags,&ComStat);
223. if(ComStat.cbInQue) //查询输入缓冲区中是否有字符 ,若有
224. {
225. // 等待WM_COMMNOTIFY消息被处理完
226. WaitForSingleObject(pDoc->m_hPostMsgEvent, INFINITE);
227. ResetEvent(pDoc->m_hPostMsgEvent);
228. PostMessage(pDoc->m_hTermWnd, WM_COMMNOTIFY, EV_RXCHAR, 0);
229. // 通知视图
230. continue;
231. }
232. dwMask=0;
233. if(!WaitCommEvent(pDoc->m_hCom, &dwMask, &os)) // 重叠操作
234. {
235. //通信事件
236. if(GetLastError()==ERROR_IO_PENDING)
237. // 无限等待重叠操作结果
238. GetOverlappedResult(pDoc->m_hCom, &os, &dwTrans, TRUE);
239. else
240. {
241. CloseHandle(os.hEvent);
242. return (UINT)-1;
243. }
244. }
245. }
246. CloseHandle(os.hEvent);
247. return
248. }
249. BOOL
250. {
251. COMMTIMEOUTS TimeOuts;
252. POSITION firstViewPos;
253. CView *pView;
254. firstViewPos=GetFirstViewPosition();
255. pView=GetNextView(firstViewPos);
256. m_hTermWnd=pView->GetSafeHwnd();
257. if(m_bConnected)
258. return
259. m_hCom=CreateFile(m_sPort, GENERIC_READ|GENERIC_WRITE,0,NULL,
260. OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,
261. // 重叠方式
262. if(m_hCom==INVALID_HANDLE_VALUE)
263. //AfxMessageBox("dfhksdjfhsjkfhks",MB_OK);
264. return
265. SetupComm(m_hCom,1024,1024);
266. ///!!!!!!!!!!!
267. // 把间隔超时设为最大,把总超时设为0将导致ReadFile立即返回并完成操作
268. TimeOuts.ReadIntervalTimeout=MAXDWORD;
269. TimeOuts.ReadTotalTimeoutMultiplier=0;
270. TimeOuts.ReadTotalTimeoutConstant=0;
271. /* 设置写超时以指定WriteComm成员函数中的
272. GetOverlappedResult函数的等待时间*/
273. TimeOuts.WriteTotalTimeoutMultiplier=50;
274. TimeOuts.WriteTotalTimeoutConstant=2000;
275. SetCommTimeouts(m_hCom, &TimeOuts);
276. if(ConfigConnection())
277. {
278. this, THREAD_PRIORITY_NORMAL,
279. // 创建并挂起线程
280. if(m_pThread==NULL)
281. {
282. CloseHandle(m_hCom);
283. return
284. }
285. else
286. {
287. m_bConnected=TRUE;
288. // 恢复线程运行
289. }
290. }
291. else
292. {
293. CloseHandle(m_hCom);
294. return
295. }
296. return
297. }
298. void
299. {
300. if(!m_bConnected) return;
301. m_bConnected=FALSE;
302. //结束CommProc线程中WaitSingleObject函数的等待
303. SetEvent(m_hPostMsgEvent);
304. //结束CommProc线程中WaitCommEvent的等待
305. SetCommMask(m_hCom, 0);
306. //等待辅助线程终止
307. WaitForSingleObject(m_pThread->m_hThread, INFINITE);
308. m_pThread=NULL;
309. CloseHandle(m_hCom);
310. }
311. BOOL CRobotDoc::ConfigConnection()///设置DCB
312. {
313. DCB dcb;
314. if(!GetCommState(m_hCom, &dcb))
315. return
316. dcb.fBinary=TRUE;
317. // 波特率
318. // 每字节位数
319. dcb.fParity=TRUE;
320. switch(m_nParity) // 校验设置
321. {
322. case
323. break;
324. case
325. break;
326. case
327. break;
328. default:;
329. }
330. switch(m_nStopBits) // 停止位
331. {
332. case
333. break;
334. case
335. break;
336. case
337. break;
338. default:;
339. }
340. // 硬件流控制设置
341. // dcb.fOutxCtsFlow=m_nFlowCtrl==1;
342. // dcb.fRtsControl=m_nFlowCtrl==1?RTS_CONTROL_HANDSHAKE:RTS_CONTROL_ENABLE;
343. // XON/XOFF流控制设置
344. // dcb.fInX=dcb.fOutX=m_nFlowCtrl==2;
345. // dcb.XonChar=XON;
346. // dcb.XoffChar=XOFF;
347. // dcb.XonLim=50;
348. // dcb.XoffLim=50;
349. return
350. }
351. DWORD CRobotDoc::ReadComm(unsigned char *buf,DWORD
352. {
353. DWORD
354. COMSTAT ComStat;
355. DWORD
356. // 清除错误标志
357. length=min(dwLength, ComStat.cbInQue);
358. // 将指定数量的字符从串行口输出
359. return
360. }
361. // 将指定数量的字符从串行口输出
362. DWORD CRobotDoc::WriteComm(unsigned char *buf,DWORD
363. {
364. BOOL
365. DWORD
366. COMSTAT ComStat;
367. DWORD
368. // 清除错误标志
369. fState=WriteFile(m_hCom,buf,length,&length,&m_osWrite);
370. if(!fState){
371. if(GetLastError()==ERROR_IO_PENDING)
372. {
373. // 等待
374. }
375. else
376. length=0;
377. }
378. return
379. }
380. // 工作者线程,负责监视串行口
381.
382. void
383. {
384. // TODO: Add your command handler code here
385. //ShellExecute(NULL,NULL,_T("Jqrhelp.chm"),NULL,_T("e://机器人"),NULL);
386. }
语音识别波纹动画 语音识别模板
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
【语音识别】玩转语音识别 1 语音识别简介
【语音识别】⚠️玩转语音识别 1⚠️ 语音识别简介
计算机视觉 机器学习 算法 原力计划 语音识别 -
buzz 语音识别 语音识别实战人工智能 移动开发 语音识别 监听器