c++ - 连接按下的 WM_Char 键值 win32API

标签 c++ c winapi

我正在 try catch WM_CHAR 键的值,然后将所有捕获的值放入一个字符串中。我试图将按下的键值 2、3、4 和 5 与 _tcscat 连接起来,生成的 TCHAR 字符串看起来像这样“22232323423423452345” 我想知道如何使 TCHAR 字符串看起来像 2345。以下是我的代码有。

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{

      static PMSG   pmsg ;  
      int           i, iType ;
      int           StrLen;
      TCHAR     StrBuf[9];
      static TCHAR         tBuf[32];
      TCHAR     MyTchar[8] = TEXT ("A");
      WORD          wCharCode;

     switch (message)
    {
      case WM_PAINT:
        hdc = BeginPaint (hwnd, &ps) ;
        GetClientRect(hwnd, &rect);
        SelectObject (hdc, GetStockObject (SYSTEM_FONT)) ;
        SetBkMode (hdc, TRANSPARENT) ;          
        for (i = min (cLines, cLinesMax), cScreenLine=1; i>0 ; i--, cScreenLine++)
        {
             iType  =   pmsg[i-1].message == WM_CHAR ;


     if (!iType)
            {

              StrLen= wsprintf(StrBuf, TEXT("%s"), TEXT(" "));
     }
            else
     {
    wCharCode = (WORD)(pmsg[i-1].wParam & 0xffff);
          memcpy(&MyTchar, &wCharCode, 2);
                 StrLen = wsprintf(StrBuf[2], TEXT("%s"), &MyTchar);
    _tcscat(tBuf, MyTchar);


      }


      EndPaint (hwnd, &ps) ;

      return 0 ;

     case WM_DESTROY:
         PostQuitMessage (0) ;
         return 0 ;
 }

}

最佳答案

我不明白您在 WM_PAINT 消息期间的消息处理。您可能希望将 WM_CHAR 作为一个单独的消息来处理,您可以在其中跟踪字符串。

在您的 WndProc 之外, 你需要 #include <string>;std::wstring keyPresses;

WM_CHAR 然后可以像 WndProc 中的任何其他事件一样处理。

case WM_CHAR:
    switch (wParam) 
    { 
        // First, handle non-displayable characters by beeping.
        case 0x08:  // backspace.
        case 0x09:  // tab.
        case 0x0A:  // linefeed.
        case 0x0D:  // carriage return.
        case 0x1B:  // escape.
        case 0x20:  // space.
            MessageBeep((UINT) -1); 
        break;

        // Next, handle displayable characters by appending them to our string.
        default:
            keyPresses += (wchar_t) wParam;
    } 
    break;

然后,您可以对该字符串进行任何操作,包括 displaying it在 WM_PAINT 消息期间。

关于c++ - 连接按下的 WM_Char 键值 win32API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13596797/

相关文章:

c++ - 在 NetBeans 动态库项目中使用不同目录中的源文件

c - mode_t 0644 是什么意思?

c - 定义主程序标题上定义的堆栈结构数组的数据类型

c# - 如何通过安装驱动程序来检查Windows是否繁忙?

c++ - QT应用---WIFI连接

c++ - 删除 vector 中的指针时出错

c++ - Qt : Software using QOpenGLWidget crash on mainwindow. 显示()

c - 在多个字符串的偶数和奇数位置打印字符

windows - WM_GETICON 有时不返回图标句柄

c++ - 如何以编程方式确定 Windows 计算机是否是域的成员?