键盘按键的处理和单字节的判断,不允许输入汉字

本文介绍了一个窗口过程函数PreTranslateMessage的实现细节,该函数用于处理键盘输入事件,包括方向键、回车键、删除键等,并根据不同的按键更新当前焦点位置。文章通过具体的代码示例展示了如何在一个窗口中实现键盘导航的功能。

BOOL CWndWtrite::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message==WM_KEYDOWN) //判断是否有按键按下
{
switch(pMsg->wParam)
{
case VK_DOWN: //表示是方向键中的向下的键
{
int i=m_pProgData->GetCurRow();
i++;
if(i >= m_pProgData->GetRowCnt() )
m_pProgData->SetCurRow(0);
else
m_pProgData->SetCurRow(i);
Invalidate();
break;
}
case VK_UP: //表示是方向键中的向上的键
{
int i=m_pProgData->GetCurRow();
i--;
if (i < 0)
m_pProgData->SetCurRow(m_pProgData->GetRowCnt()-1);
else
m_pProgData->SetCurRow(i);
Invalidate();
break;
}
case VK_RIGHT:
{
if((m_pProgData->GetCurRow())*(m_pProgData->GetColCnt())+m_pProgData->GetCurCol() >= (m_pProgData->GetColCnt())*(m_pProgData->GetRowCnt())-1)
{
m_pProgData->SetCurRow(0);
m_pProgData->SetCurCol(0);
}
else
{
int i=m_pProgData->GetCurCol();
i++;
if(i >=m_pProgData->GetColCnt())
{
m_pProgData->SetCurCol(0);
int j=m_pProgData->GetCurRow();
j++;
if (j >=m_pProgData->GetRowCnt())
m_pProgData->SetCurRow(0);
else
m_pProgData->SetCurRow(j);
}

else
m_pProgData->SetCurCol(i);
}
Invalidate();
break;
}
case VK_LEFT:
{
int i=m_pProgData->GetCurCol();
i--;
if (i<0)
{
m_pProgData->SetCurCol(m_pProgData->GetColCnt()-1);
int j=m_pProgData->GetCurRow();
j--;

if (j <0)
{
m_pProgData->SetCurRow(m_pProgData->GetRowCnt()-1);
}
else m_pProgData->SetCurRow(j);
}
else
m_pProgData->SetCurCol(i);
Invalidate();
break;
}
case VK_RETURN:
{
m_pProgData->SetCurCol(0);
m_pProgData->SetCurRow( (m_pProgData->GetCurRow()+1) % m_pProgData->GetRowCnt() );
Invalidate();
break;
}
case VK_DELETE:
{
m_pProgData->SetWordItems( m_pProgData->GetCurFrame(), m_pProgData->GetCurRow(), m_pProgData->GetCurCol(), ' ' );
((CInfoStationDlg *)GetParent())->UpdateCurFrameWord();
Invalidate();
}
default:
break;
}
}
else if(pMsg->message == WM_CHAR)
{
if ( pMsg->wParam == VK_BACK )
{
m_pProgData->BackDown();
}
else
{
unsigned char chWord = pMsg->wParam;
if(chWord < 0x80)//只需要输入单字节的字符
{
m_pProgData->CharDown( chWord );
}
}

((CInfoStationDlg *)GetParent())->UpdateCurFrameWord();
Invalidate();
}
SetFocus();

return CWnd::PreTranslateMessage(pMsg);
}

转载于:https://www.cnblogs.com/chenzuoyou/archive/2013/05/29/3106495.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值