⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 softkb.c

📁 基于minigui的软键盘设计的相关资料
💻 C
字号:
#include "softkb.h"

#define ITEM_NUM1	11  /* coolbar */
#define ITEM_NUM2	11  /* coolbar */
#define ITEM_NUM3    11  /* coolbar */
#define ITEM_NUM4	10  /* coolbar */

#define IDC_NovaSKB1  1001  /* ime */
#define IDC_NovaSKB2  1002  /* ime */
#define IDC_NovaSKB3  1003  /* ime */
#define IDC_NovaSKB4  1004  /* ime */


#define HEIGHT_SKB 98 /* 软键盘 */
#define WIDTH_SKB 248 /* 软键盘 */

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

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

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

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

static const char* caption3[] =
{
   "  a  ", "  s  ", "  d  ", "  f  ", "  g  ","  h  ", "  j  ", "  k  ", "  l  ", " left ",
   " right "
};
static const int SCANCODE3[] = 
{
	SCANCODE_A, SCANCODE_S, SCANCODE_D, SCANCODE_F, 
	SCANCODE_G, SCANCODE_H, SCANCODE_J, SCANCODE_K, SCANCODE_L ,SCANCODE_CURSORBLOCKLEFT,
	SCANCODE_CURSORBLOCKRIGHT
	
};


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


static void create_novaskb1 (HWND hWnd)
{
	HWND cb = NULL;
	COOLBARITEMINFO item;
	int i;

	cb = CreateWindow (CTRL_COOLBAR,
                    "",
                    WS_CHILD | WS_VISIBLE | WS_BORDER, 
                    IDC_NovaSKB1,
                    0, 0, 240, 20,
                    hWnd,
                    0);
	
	item.ItemType = TYPE_TEXTITEM;
	item.Bmp = NULL;
	item.ItemHint = NULL;
	item.dwAddData = 0;
	for (i = 0; i < ITEM_NUM1; i++) 
	{
	item.insPos = i;
	item.id = i;
	item.Caption = caption1[i];
	
	SendMessage(cb, CBM_ADDITEM, 0, (LPARAM)&item);
    	}
}

static void create_novaskb2 (HWND hWnd)
{
    HWND cb;
    COOLBARITEMINFO item;
    int i;

    cb = CreateWindow (CTRL_COOLBAR,
                    "",
                    WS_CHILD | WS_VISIBLE | WS_BORDER, 
                    IDC_NovaSKB2,
                    0, 22, 240, 20,
                    hWnd,
                    0);

    item.ItemType = TYPE_TEXTITEM;
    item.Bmp = NULL;
    item.ItemHint = NULL;
    
    item.dwAddData = 0;
    for (i = 0; i < ITEM_NUM2; i++) 
    {
	item.insPos = i;
	item.id = i;
	item.Caption = caption2[i];
	
	SendMessage (cb, CBM_ADDITEM, 0, (LPARAM)&item);
    }
}

static void create_novaskb3 (HWND hWnd)
{
    HWND cb;
    COOLBARITEMINFO item;
    int i;

    cb = CreateWindow (CTRL_COOLBAR,
                    "",
                    WS_CHILD | WS_VISIBLE | WS_BORDER, 
                    IDC_NovaSKB3,
                    0, 44, 240, 20,
                    hWnd,
                    0);

    item.ItemType = TYPE_TEXTITEM;
    item.Bmp = NULL;
    item.ItemHint = NULL;
    item.dwAddData = 0;
    for (i = 0; i < ITEM_NUM3; i++) 
    {
	item.insPos = i;
	item.id = i;
	item.Caption = caption3[i];
	
	SendMessage (cb, CBM_ADDITEM, 0, (LPARAM)&item);
    }
}
static void create_novaskb4 (HWND hWnd)
{
    HWND cb;
    COOLBARITEMINFO item;
    int i;

    cb = CreateWindow (CTRL_COOLBAR,
                    "",
                    WS_CHILD | WS_VISIBLE | WS_BORDER , 
                    IDC_NovaSKB4,
                    0, 66, 240, 20,
                    hWnd,
                    0);

    item.ItemType = TYPE_TEXTITEM;
    item.Bmp = NULL;
    item.ItemHint = NULL;
    item.dwAddData = 0;
    for (i = 0; i < ITEM_NUM4; i++) 
    {
	item.insPos = i;
	item.id = i;
	item.Caption = caption4[i];
	
	SendMessage (cb, CBM_ADDITEM, 0, (LPARAM)&item);
    }
}


static int NovaSKBProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam)
{
	switch (message)
	{
		case MSG_CREATE:
			create_novaskb1(hWnd);
			create_novaskb2(hWnd);
			create_novaskb3(hWnd);
			create_novaskb4(hWnd);
			
			
		 break;

	case MSG_COMMAND:
	{
		int id = LOWORD (wParam);
		int code = HIWORD (wParam);
			
		switch (id)
		{
			case IDC_NovaSKB1:
				SendMessage (hIMEWnd, MSG_KEYDOWN, SCANCODE1[code], 0);
				break;
			case IDC_NovaSKB2:
				SendMessage (hIMEWnd, MSG_KEYDOWN, SCANCODE2[code], 0);
				break;
			case IDC_NovaSKB3:
				SendMessage (hIMEWnd, MSG_KEYDOWN, SCANCODE3[code], 0);
				break;
			case IDC_NovaSKB4:
				SendMessage (hIMEWnd, MSG_KEYDOWN, SCANCODE4[code], 0);
				break;

		}
		
	}
	break;

//    case MSG_KEYDOWN:
    //    Send2ActiveClient(MSG_KEYDOWN, wParam, lParam);
 //       break;

    case MSG_DESTROY:
        DestroyAllControls (hWnd);
	return 0;

    case MSG_CLOSE:

        DestroyMainWindow (hWnd);
        PostQuitMessage (hWnd);
        return 0;
    }

    return DefaultMainWinProc(hWnd, message, wParam, lParam);
}


static void InitNovaSKBCreateInfo (PMAINWINCREATE pCreateInfo, int x, int y) 
{ 
    pCreateInfo->dwStyle = WS_BORDER | WS_VISIBLE ; 
    pCreateInfo->dwExStyle = WS_EX_TOOLWINDOW; 
    pCreateInfo->spCaption = "NovaSKB" ; 
    pCreateInfo->hMenu = 0; 
    pCreateInfo->hCursor = GetSystemCursor(IDC_ARROW); 
    pCreateInfo->hIcon = 0; 
    pCreateInfo->MainWindowProc = NovaSKBProc; 
    pCreateInfo->lx = x; 
    pCreateInfo->ty = y; 
    pCreateInfo->rx = x + WIDTH_SKB; 
    pCreateInfo->by = y + HEIGHT_SKB;

    pCreateInfo->iBkColor = GetWindowElementColor(BKC_CONTROL_DEF); 
    pCreateInfo->dwAddData = 0; 
    pCreateInfo->hHosting = HWND_DESKTOP; 
} 

HWND NovaSKBWindow(HWND hosting, int x, int y)
{
    HWND hwnd_novaskb;
    MAINWINCREATE CreateInfo;
    


    InitNovaSKBCreateInfo(&CreateInfo, x, y);
    CreateInfo.hHosting = hosting;

    hwnd_novaskb = CreateMainWindow (&CreateInfo);
    if (hwnd_novaskb == HWND_INVALID)
		return -1;
    ShowWindow(hwnd_novaskb, SW_SHOW);

    return hwnd_novaskb;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -