1.键盘输入
2.键盘消息
消息 | 说明 | WPARM | LPARAM |
---|
MSG_KEYDOWN | 按键按下(如果按键长按不放,则会一直产生这个消息,包括特殊按键的按键) | 扫描码 | 特殊键状态 |
MSG_KEYUP | 按键松开 | 扫描码 | 特殊键状态 |
MSG_SYSKEYDOWN | 特殊按键的按键按下 | 特殊键扫描码 | 特殊键状态 |
MSG_SYSKEYUP | 特殊按键的按键松开 | 特殊键扫描码 | 特殊键状态 |
MSG_CHAR | TranslateMessage收到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);
#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);
}