亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? robotdoc.cpp

?? < VC++視頻音頻開發>> 這本書的源碼
?? CPP
字號:
// robotDoc.cpp : implementation of the CRobotDoc class
//

#include "stdafx.h"
#include "robot.h"
#include"SetupDlg.h"
#include "robotDoc.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CRobotDoc

IMPLEMENT_DYNCREATE(CRobotDoc, CDocument)

BEGIN_MESSAGE_MAP(CRobotDoc, CDocument)
	//{{AFX_MSG_MAP(CRobotDoc)
	ON_COMMAND(ID_SETUPCOMM, OnSetupcomm)
	ON_COMMAND(ID_CLOSECOMM, OnClosecomm)
	ON_COMMAND(ID_OPENCOMM, OnOpencomm)
	ON_UPDATE_COMMAND_UI(ID_OPENCOMM, OnUpdateOpencomm)
	ON_UPDATE_COMMAND_UI(ID_CLOSECOMM, OnUpdateClosecomm)
	ON_COMMAND(ID_ANJIANCTRL, OnAnjianctrl)
	ON_UPDATE_COMMAND_UI(ID_ANJIANCTRL, OnUpdateAnjianctrl)
	ON_COMMAND(ID_VOICECTRL, OnVoicectrl)
	ON_UPDATE_COMMAND_UI(ID_VOICECTRL, OnUpdateVoicectrl)
	ON_COMMAND(ID_HELP, OnHelp)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CRobotDoc construction/destruction

CRobotDoc::CRobotDoc()
{
	// TODO: add one-time construction code here
	m_bConnected=FALSE;
	m_pThread=NULL;
	m_nBaud =244;
	m_nDataBits = 8;
	m_nParity = 1;
	m_sPort = "COM1";
	m_nStopBits = 0;
	m_bctrlmodal=FALSE;
	m_uCurrentBtn=ID_CLOSECOMM;
}

CRobotDoc::~CRobotDoc()
{
	if(m_bConnected)
	CloseConnection();
	// 刪除事件句柄
	if(m_hPostMsgEvent)
	CloseHandle(m_hPostMsgEvent);
	if(m_osRead.hEvent)
	CloseHandle(m_osRead.hEvent);
	if(m_osWrite.hEvent)
	CloseHandle(m_osWrite.hEvent);
}

BOOL CRobotDoc::OnNewDocument()
{
	if (!CDocument::OnNewDocument())
		return FALSE;

	// TODO: add reinitialization code here
	// (SDI documents will reuse this document)
	// 為WM_COMMNOTIFY消息創建事件對象,手工重置,初始化為有信號的
	if((m_hPostMsgEvent=CreateEvent(NULL, TRUE, TRUE, NULL))==NULL)
		return FALSE;
	memset(&m_osRead, 0, sizeof(OVERLAPPED));
	memset(&m_osWrite, 0, sizeof(OVERLAPPED));
	// 為重疊讀創建事件對象,手工重置,初始化為無信號的
	if((m_osRead.hEvent=CreateEvent(NULL, TRUE, FALSE, NULL))==NULL)
		return FALSE;
	// 為重疊寫創建事件對象,手工重置,初始化為無信號的
	if((m_osWrite.hEvent=CreateEvent(NULL, TRUE, FALSE, NULL))==NULL)
		return FALSE;
	return TRUE;
}



/////////////////////////////////////////////////////////////////////////////
// CRobotDoc serialization

void CRobotDoc::Serialize(CArchive& ar)
{
	if (ar.IsStoring())
	{
		// TODO: add storing code here
	}
	else
	{
		// TODO: add loading code here
	}
}

/////////////////////////////////////////////////////////////////////////////
// CRobotDoc diagnostics

#ifdef _DEBUG
void CRobotDoc::AssertValid() const
{
	CDocument::AssertValid();
}

void CRobotDoc::Dump(CDumpContext& dc) const
{
	CDocument::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CRobotDoc commands

void CRobotDoc::OnSetupcomm() 
{
	// TODO: Add your command handler code here
	CSetupDlg dlg;
	CString str;
	dlg.m_bConnected=m_bConnected;
	dlg.m_sPort=m_sPort;
	str.Format("%d",m_nBaud);
	dlg.m_sBaud=str;
	str.Format("%d",m_nDataBits);
	dlg.m_sDataBits=str;
	dlg.m_nParity=m_nParity;
	dlg.m_nStopBits=m_nStopBits;
	//dlg.m_nFlowCtrl=m_nFlowCtrl;
	//dlg.m_bEcho=m_bEcho;
//	dlg.m_bNewLine=m_bNewLine;
	if(dlg.DoModal()==IDOK)
	{
		m_sPort=dlg.m_sPort;
		m_nBaud=atoi(dlg.m_sBaud);
		m_nDataBits=atoi(dlg.m_sDataBits);
		m_nParity=dlg.m_nParity;
		m_nStopBits=dlg.m_nStopBits;
	//	m_nFlowCtrl=dlg.m_nFlowCtrl;
	//	m_bEcho=dlg.m_bEcho;
	//	m_bNewLine=dlg.m_bNewLine;
		if(m_bConnected)
			if(!ConfigConnection())
				AfxMessageBox("Can't realize the settings!");
	}
}

void CRobotDoc::OnClosecomm() 
{
	// TODO: Add your command handler code here
	m_uCurrentBtn=ID_CLOSECOMM;
	CloseConnection();
}

void CRobotDoc::OnOpencomm() 
{
	// TODO: Add your command handler code here
	m_uCurrentBtn=ID_OPENCOMM;
	if(!OpenConnection())
		AfxMessageBox("Can't open connection");
}

void CRobotDoc::OnUpdateOpencomm(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	//pCmdUI->Enable(!m_bConnected);
		pCmdUI->SetRadio(pCmdUI->m_nID == m_uCurrentBtn);
}

void CRobotDoc::OnUpdateClosecomm(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
//	pCmdUI->Enable(m_bConnected);
	pCmdUI->SetRadio(pCmdUI->m_nID == m_uCurrentBtn);
}

void CRobotDoc::OnAnjianctrl() 
{
	// TODO: Add your command handler code here
	
}

void CRobotDoc::OnUpdateAnjianctrl(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	
}

void CRobotDoc::OnVoicectrl() 
{
	// TODO: Add your command handler code here
//	WinExec(NULL,NULL,_T("dutty.exe"),NULL,_T("D:\\Program Files\\Dutty\\Dutty.exe"),NULL);
	WinExec(_T("D:\\Program Files\\Dutty\\Dutty.exe"),SW_SHOW);
	m_bctrlmodal=TRUE;
	//STARTUPINFO stinfo;   //啟動窗口的信息 
      //PROCESSINFO procinfo;  //進程的信息    
	   //CreateProcess(NULL,_T("dutty.exe"),NULL,NULL.FALSE, NORMAL_PRIORITY_ CLASS,NULL,NULL, &stinfo,&procinfo); 
}

void CRobotDoc::OnUpdateVoicectrl(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	pCmdUI->Enable(!m_bctrlmodal);
}
UINT CommProc(LPVOID pParam)
{
	OVERLAPPED os;
	DWORD dwMask, dwTrans;
	COMSTAT ComStat;
	DWORD dwErrorFlags;
	CRobotDoc *pDoc=(CRobotDoc*)pParam;
	memset(&os, 0, sizeof(OVERLAPPED));
	os.hEvent=CreateEvent(NULL, TRUE, FALSE, NULL);
	if(os.hEvent==NULL)
	{
		AfxMessageBox("Can't create event object!");
		return (UINT)-1;
	}
	while(pDoc->m_bConnected)
	{
		ClearCommError(pDoc->m_hCom,&dwErrorFlags,&ComStat);
		if(ComStat.cbInQue)         //查詢輸入緩沖區中是否有字符 ,若有
		{
			// 等待WM_COMMNOTIFY消息被處理完
			WaitForSingleObject(pDoc->m_hPostMsgEvent, INFINITE);
			ResetEvent(pDoc->m_hPostMsgEvent);
			PostMessage(pDoc->m_hTermWnd, WM_COMMNOTIFY, EV_RXCHAR, 0);
			// 通知視圖
			continue;
		}
		dwMask=0;
		if(!WaitCommEvent(pDoc->m_hCom, &dwMask, &os)) // 重疊操作
		{
			//通信事件
			if(GetLastError()==ERROR_IO_PENDING)
				// 無限等待重疊操作結果
				GetOverlappedResult(pDoc->m_hCom, &os, &dwTrans, TRUE);
			else
			{
				CloseHandle(os.hEvent);
				return (UINT)-1;
			}
		}
	}
	CloseHandle(os.hEvent);
	return 0;
}
BOOL CRobotDoc::OpenConnection()
{
	COMMTIMEOUTS TimeOuts;
	POSITION firstViewPos;
	CView *pView;
	firstViewPos=GetFirstViewPosition();
	pView=GetNextView(firstViewPos);
	m_hTermWnd=pView->GetSafeHwnd();
	if(m_bConnected)
		return FALSE;
	m_hCom=CreateFile(m_sPort, GENERIC_READ|GENERIC_WRITE,0,NULL,
		OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED, 
		NULL); // 重疊方式
	if(m_hCom==INVALID_HANDLE_VALUE)
		//AfxMessageBox("dfhksdjfhsjkfhks",MB_OK);
		return FALSE;
	SetupComm(m_hCom,1024,1024);
	SetCommMask(m_hCom, EV_RXCHAR);///////////////////!!!!!!!!!!!
	// 把間隔超時設為最大,把總超時設為0將導致ReadFile立即返回并完成操作
	TimeOuts.ReadIntervalTimeout=MAXDWORD; 
	TimeOuts.ReadTotalTimeoutMultiplier=0; 
	TimeOuts.ReadTotalTimeoutConstant=0; 
	/* 設置寫超時以指定WriteComm成員函數中的
	GetOverlappedResult函數的等待時間*/
	TimeOuts.WriteTotalTimeoutMultiplier=50; 
	TimeOuts.WriteTotalTimeoutConstant=2000;
	SetCommTimeouts(m_hCom, &TimeOuts);
	if(ConfigConnection())
	{
		m_pThread=AfxBeginThread(CommProc, this, THREAD_PRIORITY_NORMAL, 
			0, CREATE_SUSPENDED, NULL); // 創建并掛起線程
		if(m_pThread==NULL)
		{
			CloseHandle(m_hCom);
			return FALSE;
		}
		else
		{
			m_bConnected=TRUE;
			m_pThread->ResumeThread(); // 恢復線程運行
		}
	}
	else
	{
		CloseHandle(m_hCom);
		return FALSE;
	}
	return TRUE;
}
void CRobotDoc::CloseConnection()
{
	if(!m_bConnected) return;
	m_bConnected=FALSE;
	//結束CommProc線程中WaitSingleObject函數的等待
	SetEvent(m_hPostMsgEvent); 
	//結束CommProc線程中WaitCommEvent的等待
	SetCommMask(m_hCom, 0); 
	//等待輔助線程終止
	WaitForSingleObject(m_pThread->m_hThread, INFINITE);
	m_pThread=NULL;
	CloseHandle(m_hCom);
}
BOOL CRobotDoc::ConfigConnection()///設置DCB
{
	DCB dcb;
	if(!GetCommState(m_hCom, &dcb))
		return FALSE;
	dcb.fBinary=TRUE;
	dcb.BaudRate=m_nBaud; // 波特率
	dcb.ByteSize=m_nDataBits; // 每字節位數
	dcb.fParity=TRUE;
	switch(m_nParity) // 校驗設置
	{
	case 0: dcb.Parity=NOPARITY;
		break;
	case 1: dcb.Parity=EVENPARITY;
		break;
	case 2: dcb.Parity=ODDPARITY;
		break;
	default:;
	}
	switch(m_nStopBits) // 停止位
	{
	case 0: dcb.StopBits=ONESTOPBIT;
		break;
	case 1: dcb.StopBits=ONE5STOPBITS;
		break;
	case 2: dcb.StopBits=TWOSTOPBITS;
		break;
	default:;
	}
	// 硬件流控制設置
//	dcb.fOutxCtsFlow=m_nFlowCtrl==1;
//	dcb.fRtsControl=m_nFlowCtrl==1?RTS_CONTROL_HANDSHAKE:RTS_CONTROL_ENABLE;
	// XON/XOFF流控制設置
//	dcb.fInX=dcb.fOutX=m_nFlowCtrl==2;
//	dcb.XonChar=XON;
//	dcb.XoffChar=XOFF;
//	dcb.XonLim=50;
//	dcb.XoffLim=50;
	return SetCommState(m_hCom, &dcb);
}
DWORD CRobotDoc::ReadComm(unsigned char *buf,DWORD dwLength)
{
	DWORD length=0;
	COMSTAT ComStat;
	DWORD dwErrorFlags;
	ClearCommError(m_hCom,&dwErrorFlags,&ComStat); // 清除錯誤標志
	length=min(dwLength, ComStat.cbInQue);
	ReadFile(m_hCom,buf,length,&length,&m_osRead);// 將指定數量的字符從串行口輸出
	return length;
}
// 將指定數量的字符從串行口輸出
DWORD CRobotDoc::WriteComm(unsigned char *buf,DWORD dwLength)
{
	BOOL fState;
	DWORD length=dwLength;
	COMSTAT ComStat;
	DWORD dwErrorFlags;
	ClearCommError(m_hCom,&dwErrorFlags,&ComStat); // 清除錯誤標志
	fState=WriteFile(m_hCom,buf,length,&length,&m_osWrite);
	if(!fState){
		if(GetLastError()==ERROR_IO_PENDING)
		{
			GetOverlappedResult(m_hCom,&m_osWrite,&length,TRUE);// 等待
		}
		else
			length=0;
	}
	return length;
}
// 工作者線程,負責監視串行口

void CRobotDoc::OnHelp() 
{
	// TODO: Add your command handler code here
      //ShellExecute(NULL,NULL,_T("Jqrhelp.chm"),NULL,_T("e:\\機器人"),NULL);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线观看av一区| 久久综合综合久久综合| 色综合久久88色综合天天6| 亚洲欧洲日韩av| 色综合久久久久| 午夜视频一区在线观看| 欧美一区二区免费| 另类专区欧美蜜桃臀第一页| 久久久蜜桃精品| 97精品久久久午夜一区二区三区| 一区二区在线观看av| 欧美日本在线看| 国内外精品视频| 中文字幕色av一区二区三区| 色婷婷久久久综合中文字幕| 日韩在线卡一卡二| 久久久久久毛片| 在线免费观看成人短视频| 日韩国产精品久久久| 久久久99精品免费观看不卡| 色一情一伦一子一伦一区| 日韩av一区二| 国产精品欧美经典| 欧美高清www午色夜在线视频| 国产一区二区三区免费播放| 伊人婷婷欧美激情| 欧美mv日韩mv| 91精品1区2区| 国产在线不卡视频| 亚洲综合网站在线观看| 久久久午夜精品理论片中文字幕| 在线一区二区三区| 狠狠色狠狠色综合系列| 亚洲午夜影视影院在线观看| 国产亚洲一区二区在线观看| 在线观看日产精品| 高清成人在线观看| 免费的国产精品| 亚洲精品国产精华液| 久久亚洲精品小早川怜子| 欧美体内she精高潮| 国产精品123| 久久不见久久见免费视频7| 一区二区三区丝袜| 中文字幕乱码一区二区免费| 欧美一区二区视频在线观看| 色呦呦国产精品| 成人精品视频网站| 国产精品自拍一区| 美腿丝袜亚洲综合| 亚洲电影一级黄| 亚洲欧美另类在线| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 欧美中文字幕一区二区三区亚洲| 精品无人码麻豆乱码1区2区| 日韩高清不卡在线| 亚洲精品乱码久久久久久| 国产精品人妖ts系列视频| 日韩欧美国产电影| 欧美丰满少妇xxxxx高潮对白| 色综合久久88色综合天天免费| 懂色中文一区二区在线播放| 紧缚奴在线一区二区三区| 美女爽到高潮91| 天堂影院一区二区| 亚洲大片一区二区三区| 亚洲一区二区3| 亚洲国产精品久久久男人的天堂| 一区二区三区色| 亚洲图片欧美色图| 亚洲综合激情网| 一卡二卡欧美日韩| 一区二区三区在线免费视频| 一区二区三区成人| 一区二区三区在线免费观看| 亚洲综合成人在线| 亚洲午夜久久久久久久久电影院 | 国产精品一区二区果冻传媒| 久久er精品视频| 国产一区二区伦理片| 国产在线国偷精品免费看| 国产在线精品一区二区夜色 | 毛片av中文字幕一区二区| 日本三级亚洲精品| 蜜臀精品一区二区三区在线观看 | 久久精品视频在线看| 2022国产精品视频| 亚洲国产岛国毛片在线| 国产精品久久久久影院| 国产精品热久久久久夜色精品三区| 国产亚洲1区2区3区| 国产精品乱码一区二三区小蝌蚪| 亚洲丝袜制服诱惑| 亚洲一区二区三区不卡国产欧美| 五月婷婷综合网| 精一区二区三区| 丁香天五香天堂综合| 96av麻豆蜜桃一区二区| 欧美色视频一区| 日韩亚洲欧美一区| 中文子幕无线码一区tr| 亚洲综合色自拍一区| 男女男精品网站| eeuss国产一区二区三区| 在线免费不卡视频| 欧美成人精品福利| 国产精品国产精品国产专区不蜜| 亚洲在线观看免费| 国产一区在线精品| 在线视频你懂得一区| 欧美不卡一区二区三区| 亚洲欧美一区二区三区久本道91| 香蕉乱码成人久久天堂爱免费| 国产一区二区毛片| 欧洲一区在线电影| 久久综合久久综合亚洲| 亚洲综合在线观看视频| 久久99国产精品麻豆| 色综合一个色综合亚洲| 欧美成人女星排名| 亚洲一区二区五区| 国产黑丝在线一区二区三区| 午夜久久久久久| 国产日产亚洲精品系列| 一区二区三区.www| 黄色成人免费在线| 欧美三级视频在线观看| 精品日本一线二线三线不卡| 亚洲精品乱码久久久久久久久| 黄页视频在线91| 欧美日韩亚洲综合一区| 久久色在线观看| 亚洲大尺度视频在线观看| 国产白丝网站精品污在线入口| 欧美精品vⅰdeose4hd| 中文字幕制服丝袜成人av| 秋霞影院一区二区| 色哦色哦哦色天天综合| 国产日韩在线不卡| 久久精品国产色蜜蜜麻豆| 欧美视频在线不卡| 中文字幕一区在线观看视频| 欧美aaa在线| 欧美精选午夜久久久乱码6080| 最新久久zyz资源站| 国产精品一区在线观看你懂的| 欧美日韩一区在线观看| 综合精品久久久| 国产高清亚洲一区| 久久蜜桃av一区精品变态类天堂 | 日韩精品乱码免费| 99久久99久久精品免费看蜜桃| 国产亚洲精品精华液| 另类小说视频一区二区| 91麻豆精品国产91久久久久久| 亚洲国产精品一区二区www在线| 97久久超碰国产精品| 欧美激情综合五月色丁香小说| 国产精品一区二区黑丝| 久久人人97超碰com| 久久福利资源站| 欧美v亚洲v综合ⅴ国产v| 美女在线观看视频一区二区| 日韩三级伦理片妻子的秘密按摩| 日本亚洲一区二区| 91麻豆精品国产| 免费在线一区观看| 精品福利一二区| 国产精品资源在线| 国产亚洲欧美一区在线观看| 粉嫩一区二区三区性色av| 欧美激情一区二区在线| 成人在线一区二区三区| 1024亚洲合集| 欧洲精品中文字幕| 亚洲高清中文字幕| 91精品久久久久久久91蜜桃| 久久99精品一区二区三区| 国产亚洲精久久久久久| 成人av资源在线观看| 玉足女爽爽91| 5566中文字幕一区二区电影| 麻豆91免费看| 国产精品人妖ts系列视频| 色88888久久久久久影院按摩| 无码av免费一区二区三区试看 | 成人综合婷婷国产精品久久免费| 国产蜜臀av在线一区二区三区| 国产 欧美在线| 亚洲黄色录像片| 91精品国产高清一区二区三区| 国内成人自拍视频| 亚洲日本护士毛茸茸| 欧美性猛交xxxxxxxx| 免费在线观看一区| 中文字幕不卡在线播放| 日本电影亚洲天堂一区| 蜜臀久久99精品久久久画质超高清 | 久久久国产一区二区三区四区小说| 国产精品一区2区|