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


    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);
    }

  • 相关阅读:
    Windows Server 2008 R2域控组策略设置禁用USB
    Windows Server 2008 R2组策略设置计算机配置和用户配置
    Windows Server 2008 R2父域管理员与子域管理员相互登录访问
    转载:如何处理浏览器的断网情况?
    转载:浏览器缓存库设计总结(localStorage/indexedDB)
    手写启动一个本地服务器的命令行工具
    Node.js-核心模块-zlib
    使用console.log打印公司招聘信息和字符画
    转载:准备刷 leetcode 了,才发现自己连时间复杂度都不懂
    转载:前端通信那些事儿
  • 原文地址:https://www.cnblogs.com/chenzuoyou/p/3106495.html
Copyright © 2020-2023  润新知