这个是收程序
void CEasy_uartDlg::OnRevData(WPARAM wParam, LPARAM lParam)
{
fStopMsg=true;
char str[101];
DWORD wCount = 0; //读取的字节数
OVERLAPPED Rol={0};
// memset(&Rol,'\0',sizeof(OVERLAPPED));
COMSTAT Rcs;
DWORD dwErrrs;
ClearCommError(hCom,&dwErrrs,&Rcs);
Rol.hEvent=CreateEvent( NULL,TRUE,FALSE,NULL);
if (ReadFile(hCom,&str,Rcs.cbInQue,&wCount,&Rol))
{
str[wCount] ='\0';
m_strRev += str;
UpdateData(false);
};
fStopMsg=false;
// PurgeComm(hCom, PURGE_TXABORT|
// PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);这个是键盘消息那个
BOOL CEasy_uartDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
UpdateData();
if (m_sRev&&pMsg->wParam==VK_SPACE)
{
MessageBox("ok");
return true;
} return CDialog::PreTranslateMessage(pMsg);
}
我也没设置焦点,因为之前用网上的方法,可以是可以,但是每次只能按我设置的那个键才会反应,按其他任何都没反应,也没输入,程序也退不了,而单独这样写我试了,可以响应空格键,但是我想串口收到的数据中有空格就响应下,应该怎么改啊?
void CEasy_uartDlg::OnRevData(WPARAM wParam, LPARAM lParam)
{
fStopMsg=true;
char str[101];
DWORD wCount = 0; //读取的字节数
OVERLAPPED Rol={0};
// memset(&Rol,'\0',sizeof(OVERLAPPED));
COMSTAT Rcs;
DWORD dwErrrs;
ClearCommError(hCom,&dwErrrs,&Rcs);
Rol.hEvent=CreateEvent( NULL,TRUE,FALSE,NULL);
if (ReadFile(hCom,&str,Rcs.cbInQue,&wCount,&Rol))
{
str[wCount] ='\0';
m_strRev += str;
UpdateData(false);
};
fStopMsg=false;
// PurgeComm(hCom, PURGE_TXABORT|
// PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);这个是键盘消息那个
BOOL CEasy_uartDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
UpdateData();
if (m_sRev&&pMsg->wParam==VK_SPACE)
{
MessageBox("ok");
return true;
} return CDialog::PreTranslateMessage(pMsg);
}
我也没设置焦点,因为之前用网上的方法,可以是可以,但是每次只能按我设置的那个键才会反应,按其他任何都没反应,也没输入,程序也退不了,而单独这样写我试了,可以响应空格键,但是我想串口收到的数据中有空格就响应下,应该怎么改啊?
不要跨线程直接更新界面,UpdateData换成PostMessage或SendMessage,然后界面响应消息,更新界面。
空格键是0x20,在你的串口数据接收函数中对接收的数据进行判断,是0x20就PostMessage(WM_USERSPACE);
然后在WM_USERSPACE消息的响应函数里编写你想要的代码。不要用UpdateData