MFC中自动义消息函数的触发,不采用按钮实现消息处理函数。
是这么一回事。我自定义了一个函数,想要它实现的功能是在编辑框中把扫描枪扫描进来的MAC号(字符串)进行操作,操作的方式是每隔两个字符加一个冒号,满17个字符就自动换行。但...
是这么一回事。我自定义了一个函数,想要它实现的功能是在编辑框中把扫描枪扫描进来的MAC号(字符串)进行操作,操作的方式是每隔两个字符加一个冒号,满17个字符就自动换行。但是我编译通过了,就是不能自动对字符串进行操作。于是我添加了一个按扭,通过按扭可以对编辑框中的字符串进行我预期的操作。我的函数如下:
LRESULT PEIZHI::OnDisplay(WPARAM wParam,LPARAM lParam)
{
UpdateData(TRUE);//更新数据
TCHAR ch;
CString ch1;
CString str1;
int jianshu;
//GetDlgItem(IDC_EDIT1)->GetWindowText(str);
long Len;
Len=strlen(m_MAC);
jianshu=Len/12;
for(int i=2;i<m_MAC.GetLength();i+=3)
{
ch = m_MAC.GetAt(i);
if(ch==_T(':')||ch==_T('\n')) continue;
if(i%18==17)
m_MAC = m_MAC.Left(i) + _T('\n') + m_MAC.Right(m_MAC.GetLength()-i);
else
m_MAC = m_MAC.Left(i) + _T(':') + m_MAC.Right(m_MAC.GetLength()-i);
}
CWnd *pcwnd=GetDlgItem(IDC_EDIT1_jishu);//取得窗口指针
str1.Format("件数:%03d",jianshu);
pcwnd->SetWindowText(str1);
UpdateData(FALSE);
return 0;
}
我的目标是字符串来到编辑框后,就自动操作,不需要我通过按扭来操作。有谁知道我上面的问题出在哪里啊,为什么不能自动实现呢。 展开
LRESULT PEIZHI::OnDisplay(WPARAM wParam,LPARAM lParam)
{
UpdateData(TRUE);//更新数据
TCHAR ch;
CString ch1;
CString str1;
int jianshu;
//GetDlgItem(IDC_EDIT1)->GetWindowText(str);
long Len;
Len=strlen(m_MAC);
jianshu=Len/12;
for(int i=2;i<m_MAC.GetLength();i+=3)
{
ch = m_MAC.GetAt(i);
if(ch==_T(':')||ch==_T('\n')) continue;
if(i%18==17)
m_MAC = m_MAC.Left(i) + _T('\n') + m_MAC.Right(m_MAC.GetLength()-i);
else
m_MAC = m_MAC.Left(i) + _T(':') + m_MAC.Right(m_MAC.GetLength()-i);
}
CWnd *pcwnd=GetDlgItem(IDC_EDIT1_jishu);//取得窗口指针
str1.Format("件数:%03d",jianshu);
pcwnd->SetWindowText(str1);
UpdateData(FALSE);
return 0;
}
我的目标是字符串来到编辑框后,就自动操作,不需要我通过按扭来操作。有谁知道我上面的问题出在哪里啊,为什么不能自动实现呢。 展开
1个回答
展开全部
扫描枪的原理是依次模拟键盘按下,最后按下回车表示结束,如果是我的话我会这样做:
编辑框改成只读,防止直接扫描进入编辑框,PreTranslateMessage拦截按钮消息,每次把按钮对应的字符添加到一个字符串中,每两次追加一个冒号,最后收到回车表示扫描结束,把字符串的内容添加到编辑框中去,字符串清空,以此循环。
另外追加一个判断,即考虑用户输入的情况,由于扫描枪每个字符的间隔很短,而人手按按钮的间隔应该是远远大于扫描枪的,所以每次要判断上一次按钮事件以来过去了多久,超过一定时间(我一般用50毫秒)则判定是用户在输入,先清空字符串再输入本次的字符。
编辑框改成只读,防止直接扫描进入编辑框,PreTranslateMessage拦截按钮消息,每次把按钮对应的字符添加到一个字符串中,每两次追加一个冒号,最后收到回车表示扫描结束,把字符串的内容添加到编辑框中去,字符串清空,以此循环。
另外追加一个判断,即考虑用户输入的情况,由于扫描枪每个字符的间隔很短,而人手按按钮的间隔应该是远远大于扫描枪的,所以每次要判断上一次按钮事件以来过去了多久,超过一定时间(我一般用50毫秒)则判定是用户在输入,先清空字符串再输入本次的字符。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询