MiniGUI利用触摸屏实现屏幕键盘驱动输入法的设计

本文介绍了如何使用MiniGUI创建触摸屏屏幕键盘,通过coolbar控件模拟键盘布局,并利用MSG_CREATE消息创建IME窗口。通过模拟键盘消息,实现了屏幕键盘的输入功能。文章还讨论了焦点转移导致输入法关闭的问题及解决方案,即阻止coolbar获取输入焦点,确保IME窗口能接收到消息。
摘要由CSDN通过智能技术生成

转自本人百度blog:http://hi.baidu.com/luv%5Fresplendent/blog/item/5a7cadf3822d56cc0b46e005.html

MiniGUI利用触摸屏实现屏幕键盘驱动输入法的设计思想:

    1、利用MiniGUI的coolbar控件来创建一个屏幕键盘的外观;其代码以后会贴上;

#include "common.h"

#define ITEM_NUM1 14 /* coolbar */
#define ITEM_NUM2 14 /* coolbar */
#define ITEM_NUM3    12 /* coolbar */
#define ITEM_NUM4 12 /* coolbar */
#define ITEM_NUM5 8 /* coolbar */
#define IDC_NovaSKB1 1001 /* ime */
#define IDC_NovaSKB2 1002 /* ime */
#define IDC_NovaSKB3 1003 /* ime */
#define IDC_NovaSKB4 1004 /* ime */
#define IDC_NovaSKB5 1005 /* ime */

#define HEIGHT_SKB 115 /* 软键盘 */
#define WIDTH_SKB 240 /* 软键盘 */

static const char* caption1[] =
{
   " ` ", " 1 ", " 2 ", " 3 ", " 4 ", " 5 "," 6 ", " 7 ", " 8 ", " 9 ", " 0 ", " - ", " = ", " <- "
};

static const int SCANCODE1[] =
{
SCANCODE_GRAVE, SCANCODE_1, SCANCODE_2, SCANCODE_3, SCANCODE_4,
SCANCODE_5, SCANCODE_6, SCANCODE_7, SCANCODE_8, SCANCODE_9,
SCANCODE_0, SCANCODE_MINUS, SCANCODE_EQUAL, SCANCODE_BACKSPACE
};

static const char* caption2[] =
{
   "Tab", " q ", " w ", " e ", " r ", " t "," y ", " u ", " i ", " o ", " p ", " [ ", " ] ", " // "
};

static const int SCANCODE2[] =
{
SCANCODE_TAB, SCANCODE_Q, SCANCODE_W, SCANCODE_E, SCANCODE_R,
SCANCODE_T, SCANCODE_Y, SCANCODE_U, SCANCODE_I, SCANCODE_O,
SCANCODE_P, SCANCODE_BRACKET_LEFT, SCANCODE_BRACKET_RIGHT, SCANCODE_BACKSLASH
};

static const char* caption3[] =
{
   "Shift ", " a ", " s ", " d ", " f ", " g "," h ", " j ", " k ", " l ", " ; ", " ' "
};
static const int SCANCODE3[] =
{
SCANCODE_LEFTSHIFT, SCANCODE_A, SCANCODE_S, SCANCODE_D, SCANCODE_F,
SCANCODE_G, SCANCODE_H, SCANCODE_J, SCANCODE_K, SCANCODE_L,
SCANCODE_SEMICOLON, SCANCODE_APOSTROPHE
};


static const char* caption4[] =
{
   "Ctrl       ", " z ", " x ", " c ", " v ", " b "," n ", " m ", " , ", " . ", " / ", " Enter "
};
static const int SCANCODE4[] =
{
SCANCODE_LEFTCONTROL, SCANCODE_Z, SCANCODE_X, SCANCODE_C, SCANCODE_V,
SCANCODE_B, SCANCODE_N, SCANCODE_M, SCANCODE_COMMA, SCANCODE_PERIOD,
SCANCODE_SLASH, SCANCODE_ENTER
};

static const char* caption5[] =
{
   "Del    ", " 英 ", " 中 ", "   Space   ",
   " | ", " | ", " -> ", " <- "
};

static const int SCANCODE5[] =
{
SCANCODE_REMOVE, -1, -1, SCANCODE_SPACE, SCANCODE_CURSORBLOCKDOWN,
SCANCODE_CURSORBLOCKUP, SCANCODE_CURSORBLOCKLEFT, SCANCODE_CURSORBLOCKRIGHT
};

static void create_novaskb1 (HWND hWnd)
{
HWND cb;
COOLBARITEMINFO item;
int i;
static BITMAP del_bmp;

if (LoadBitmap (HDC_SCREEN, &del_bmp, "./little/del.bmp") != ERR_BMP_OK)
   exit(1);

cb = CreateWindow (CTRL_COOLBAR,
                    "",
            

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值