minigui[基础篇][8]—— 键盘和鼠标之键盘

1.键盘输入

在这里插入图片描述

2.键盘消息

在这里插入图片描述

消息说明WPARMLPARAM
MSG_KEYDOWN按键按下(如果按键长按不放,则会一直产生这个消息,包括特殊按键的按键)扫描码特殊键状态
MSG_KEYUP按键松开扫描码特殊键状态
MSG_SYSKEYDOWN特殊按键的按键按下特殊键扫描码特殊键状态
MSG_SYSKEYUP特殊按键的按键松开特殊键扫描码特殊键状态
MSG_CHARTranslateMessage收到MSG_KEYDOWN和MSG_SYSKEYDOWN 产生了有字符的字符消息,直接发送MSG_CHAR到窗口过程有字符的ASCII码值特殊键状态
消息的产生
1.MiniGUI 中,当 ALT  CTRL 按下时击键,会产生系统击键消息 MSG_SYSKEYDOWN 和 MSG_SYSKEYUP。
非系统击键产生非系统击键消息 MSG_KEYDOWN 和 MSG_KEYUP
2.系统消息 ----》 一般用于菜单激活   非系统消息 -----》 一般用于应用程序   

扫描码
1.MiniGUI 可以支持 255 个键,每一个不同的键都对应于一个独一无二的“扫描码”
2.129 以下的扫描码用于定义PC 键盘

键状态获取
方式1:DWORD GUIAPI GetShiftKeyStatus (void);\
	  GetShiftKeyStatus() & KS_CTRL    
方式2:BOOL GUIAPI GetKeyStatus (UINT uKey);
方式3:lParam & KS_LEFTCTRL 

字符消息
TranslateMessage(&Msg),MSG_KEYDOWN 和 MSG_SYSKEYDOWN 消息进行处理,产生了字符消息,并且
把它直接发送到窗口过程,所以窗口过程会先收到字符键的字符消息而后收到击键消息

3.输入焦点

1.具有输入焦点的窗口可以接收键盘输入,这样的窗口一般是活动窗口、活动窗口的子窗口或活动窗口的子窗口的子窗口等,子窗口一般通过显示一个闪烁的插入符来表明它具有输入焦点
2.输入焦点是窗口的一个属性,系统可以通过移动输入焦点让显示在屏幕上的所有窗口共享键盘,用户可以把输入焦点从一个
窗口移动另一个窗口
3.如果输入焦点从一个窗口改变到另一个窗口,系统向将要失去焦点的窗口发送 MSG_KILLFOCUS 消息,而把 MSG_SETFOCUS 消息发送给将要得到焦点的窗口

//某个窗口中具有输入焦点的子窗口的句柄
#define GetFocus GetFocusChild
HWND GUIAPI GetFocusChild (HWND hWnd);

//父窗口可以调用 SetFocusChild 函数来把输入焦点赋予它的某个子窗口
#define SetFocus SetFocusChild
HWND GUIAPI SetFocusChild (HWND hWnd);

4.示例程序

#include <minigui/common.h>
#include <minigui/minigui.h>
#include <minigui/gdi.h>
#include <minigui/window.h>

static int SimplekeyWinProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam)
{
    switch (message) {
        case MSG_KEYDOWN:
            /* 打印被按下的键的扫描码 */
            printf ("MGS_KEYDOWN: key %d\n", LOWORD(wParam));
            break;
        case MSG_KEYUP:
            /* 打印被释放的键的扫描码 */
            printf ("MGS_KEYUP: key %d\n", LOWORD(wParam));
            break;
        case MSG_CHAR:
            /* 打印转换成字符的编码值 */
            printf ("MGS_CHAR: char %d\n", wParam);
            break;
        case MSG_CLOSE:
            DestroyAllControls (hWnd);
            DestroyMainWindow (hWnd);
            PostQuitMessage (hWnd);
            return 0;
}
	return DefaultMainWinProc(hWnd, message, wParam, lParam);
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值