鱼C论坛

 找回密码
 立即注册
查看: 1817|回复: 1

[技术交流] API编程初学者之键盘操作 有点难度

[复制链接]
发表于 2015-1-27 22:16:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include <Windows.h>
  2. #include <stdio.h>
  3. LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
  4. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,
  5.         LPSTR lpszCmdLine, int nCmdLine)
  6. {
  7.         HWND hwnd;
  8.         MSG msg;
  9.         char lpszClassName[] = "键盘";
  10.         char lpszTitle[] = "键盘操作";
  11.         WNDCLASS cklx;
  12.         cklx.style = CS_HREDRAW | CS_VREDRAW;
  13.         cklx.cbClsExtra = 0;
  14.         cklx.cbWndExtra = 0;
  15.         cklx.hbrBackground = (HBRUSH)(GetStockObject(WHITE_BRUSH));
  16.         cklx.hCursor = LoadCursor(NULL, IDC_ARROW);
  17.         cklx.hIcon = LoadIcon(NULL, IDI_APPLICATION);
  18.         cklx.lpfnWndProc = WndProc;
  19.         cklx.lpszClassName = lpszClassName;
  20.         cklx.lpszMenuName = NULL;
  21.         cklx.hInstance = hInstance;
  22.         if (!RegisterClass(&cklx))
  23.         {
  24.                 MessageBeep(0);
  25.                 return false;
  26.         }
  27.         hwnd = CreateWindow(lpszClassName, lpszTitle, WS_OVERLAPPEDWINDOW,
  28.                 CW_USEDEFAULT, CW_USEDEFAULT, 500, 400, NULL, NULL, hInstance, NULL);
  29.         if (!hwnd)
  30.         {
  31.                 MessageBox(NULL, "创建窗口失败!", "失败!", 0);
  32.                 return false;
  33.         }
  34.         ShowWindow(hwnd, nCmdLine);
  35.         UpdateWindow(hwnd);
  36.         while (GetMessage(&msg, NULL, 0, 0))
  37.         {
  38.                 TranslateMessage(&msg);
  39.                 DispatchMessage(&msg);
  40.         }
  41.         return msg.wParam;
  42. }
  43. LRESULT CALLBACK WndProc(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam)
  44. {
  45.         HDC hdc;
  46.         static TCHAR str[10][200] = { "" };
  47.         static int cur = 0, num = 0;
  48.         static TCHAR key_kode[][30] = {
  49.         "WM_KEYDOWN","WM_KEYUP",
  50.                 "WM_CHAR","WM_DEADCHAR",
  51.                 "WM_SYSKEYDOWN","WM_SYSKEYUP",
  52.         "WM_SYSCHAR","WM_SYSDEADCHAR"};
  53.         TCHAR temp[50] = "";
  54.         int i;
  55.         switch (umsg)
  56.         {               
  57.         case WM_CHAR:
  58.                 hdc = GetDC(hwnd);
  59.                 if (GetKeyState(VK_LCONTROL)<0)
  60.                 {
  61.                         sprintf(temp, "按下了左边的Ctrl键和%c键",wParam + 'A' - 1);
  62.                         TextOut(hdc, 0, 0, temp, strlen(temp));
  63.                 }
  64.                 ReleaseDC(hwnd, hdc);
  65.                 break;
  66. /*              case WM_KEYDOWN:
  67.                 hdc = GetDC(hwnd);
  68.                 if (wParam == VK_LEFT)
  69.                 {
  70.                         sprintf(temp, "按下了左方向键");
  71.                         TextOut(hdc, 0, 0, temp, strlen(temp));
  72.                 }
  73.                 else if (wParam == VK_RIGHT)
  74.                 {
  75.                         sprintf(temp, "按下了右方向键");
  76.                         TextOut(hdc, 0, 0, temp, strlen(temp));
  77.                 }
  78.                 else if (wParam == VK_UP)
  79.                 {
  80.                         sprintf(temp, "按下了上方向键");
  81.                         TextOut(hdc, 0, 0, temp, strlen(temp));
  82.                 }
  83.                 else if (wParam == VK_DOWN)
  84.                 {
  85.                         sprintf(temp, "按下了下方向键");
  86.                         TextOut(hdc, 0, 0, temp, strlen(temp));
  87.                 }
  88.                 ReleaseDC(hwnd, hdc);
  89.         case WM_KEYUP:
  90.         case WM_CHAR:
  91.         case WM_DEADCHAR:
  92.         case WM_SYSKEYDOWN:
  93.         case WM_SYSKEYUP:
  94.         case WM_SYSCHAR:
  95.         case WM_SYSDEADCHAR:
  96.                 if (cur >= 10)
  97.                 {
  98.                         for  (i = 0;i < 9; i++)
  99.                         {
  100.                                 strcpy(str[i], str[i + 1]);
  101.                         }
  102.                         cur = 9;
  103.                 }
  104.                 GetKeyNameText(lParam, temp, sizeof(temp)/sizeof(TCHAR));
  105.                 sprintf(str[cur], "%d::%s::::::%d::::::%s", num + 1,
  106.                         key_kode[umsg - WM_KEYFIRST], wParam,temp );
  107.                 cur++;
  108.                 num++;
  109.                 hdc = GetDC(hwnd);
  110.                 for (i = 0; i < cur; i++)
  111.                 {
  112.                         TextOut(hdc, 0, i * 20, str[i], strlen(str[i]));
  113.                 }
  114.                 ReleaseDC(hwnd, hdc);
  115.                         break; */
  116.         case WM_DESTROY:
  117.                 PostQuitMessage(0);
  118.         default:
  119.                 return DefWindowProc(hwnd, umsg, wParam, lParam);
  120.                 break;
  121.         }
  122.         return 0;
  123. }
复制代码


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-1-31 02:29:09 | 显示全部楼层
我也是刚学到键盘...共勉共勉
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-25 19:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表