鱼C论坛

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

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

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

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

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

x
#include <Windows.h>
#include <stdio.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,
        LPSTR lpszCmdLine, int nCmdLine)
{
        HWND hwnd;
        MSG msg;
        char lpszClassName[] = "键盘";
        char lpszTitle[] = "键盘操作";
        WNDCLASS cklx;
        cklx.style = CS_HREDRAW | CS_VREDRAW;
        cklx.cbClsExtra = 0;
        cklx.cbWndExtra = 0;
        cklx.hbrBackground = (HBRUSH)(GetStockObject(WHITE_BRUSH));
        cklx.hCursor = LoadCursor(NULL, IDC_ARROW);
        cklx.hIcon = LoadIcon(NULL, IDI_APPLICATION);
        cklx.lpfnWndProc = WndProc;
        cklx.lpszClassName = lpszClassName;
        cklx.lpszMenuName = NULL;
        cklx.hInstance = hInstance;
        if (!RegisterClass(&cklx))
        {
                MessageBeep(0);
                return false;
        }
        hwnd = CreateWindow(lpszClassName, lpszTitle, WS_OVERLAPPEDWINDOW,
                CW_USEDEFAULT, CW_USEDEFAULT, 500, 400, NULL, NULL, hInstance, NULL);
        if (!hwnd)
        {
                MessageBox(NULL, "创建窗口失败!", "失败!", 0);
                return false;
        }
        ShowWindow(hwnd, nCmdLine);
        UpdateWindow(hwnd);
        while (GetMessage(&msg, NULL, 0, 0))
        {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
        }
        return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam)
{
        HDC hdc;
        static TCHAR str[10][200] = { "" };
        static int cur = 0, num = 0;
        static TCHAR key_kode[][30] = {
        "WM_KEYDOWN","WM_KEYUP",
                "WM_CHAR","WM_DEADCHAR",
                "WM_SYSKEYDOWN","WM_SYSKEYUP",
        "WM_SYSCHAR","WM_SYSDEADCHAR"};
        TCHAR temp[50] = "";
        int i;
        switch (umsg)
        {                
        case WM_CHAR:
                hdc = GetDC(hwnd);
                if (GetKeyState(VK_LCONTROL)<0)
                {
                        sprintf(temp, "按下了左边的Ctrl键和%c键",wParam + 'A' - 1);
                        TextOut(hdc, 0, 0, temp, strlen(temp));
                }
                ReleaseDC(hwnd, hdc);
                break;
/*              case WM_KEYDOWN:
                hdc = GetDC(hwnd);
                if (wParam == VK_LEFT)
                {
                        sprintf(temp, "按下了左方向键");
                        TextOut(hdc, 0, 0, temp, strlen(temp));
                }
                else if (wParam == VK_RIGHT)
                {
                        sprintf(temp, "按下了右方向键");
                        TextOut(hdc, 0, 0, temp, strlen(temp));
                }
                else if (wParam == VK_UP)
                {
                        sprintf(temp, "按下了上方向键");
                        TextOut(hdc, 0, 0, temp, strlen(temp));
                }
                else if (wParam == VK_DOWN)
                {
                        sprintf(temp, "按下了下方向键");
                        TextOut(hdc, 0, 0, temp, strlen(temp));
                }
                ReleaseDC(hwnd, hdc);
        case WM_KEYUP:
        case WM_CHAR:
        case WM_DEADCHAR:
        case WM_SYSKEYDOWN:
        case WM_SYSKEYUP:
        case WM_SYSCHAR:
        case WM_SYSDEADCHAR:
                if (cur >= 10)
                {
                        for  (i = 0;i < 9; i++)
                        {
                                strcpy(str[i], str[i + 1]);
                        }
                        cur = 9;
                }
                GetKeyNameText(lParam, temp, sizeof(temp)/sizeof(TCHAR));
                sprintf(str[cur], "%d::%s::::::%d::::::%s", num + 1,
                        key_kode[umsg - WM_KEYFIRST], wParam,temp );
                cur++;
                num++;
                hdc = GetDC(hwnd);
                for (i = 0; i < cur; i++)
                {
                        TextOut(hdc, 0, i * 20, str[i], strlen(str[i]));
                }
                ReleaseDC(hwnd, hdc);
                        break; */
        case WM_DESTROY:
                PostQuitMessage(0);
        default:
                return DefWindowProc(hwnd, umsg, wParam, lParam);
                break;
        }
        return 0;
}

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

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-25 16:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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