📄 edit.c
字号:
/* ** $Id: edit.c,v 1.10 2004/05/25 10:36:52 yaoyy Exp $**** Listing 9.1**** edit.c: Sample program for MiniGUI Programming Guide** Usage of EDIT control.**** Copyright (C) 2003 Feynman Software.**** License: GPL*/#include <stdio.h>#include <stdlib.h>#include <minigui/common.h>#include <minigui/minigui.h>#include <minigui/gdi.h>#include <minigui/window.h>#include <minigui/control.h>static DLGTEMPLATE DlgBoxInputChar ={ WS_BORDER | WS_CAPTION, WS_EX_NONE, 0, 0, 640, 480, "请键入字母", 0, 0, 4, NULL, 0};#define IDC_CHAR 100#define IDC_CHARS 110static CTRLDATA CtrlInputChar [] ={ { CTRL_STATIC, WS_VISIBLE | SS_CENTER, 10, 10, 380, 18, IDC_STATIC, "请输入一个字母:", 0 }, { CTRL_SLEDIT, WS_VISIBLE | WS_TABSTOP | WS_BORDER, 170, 40, 40, 34, IDC_CHAR, NULL, 0 }, { CTRL_MLEDIT, WS_VISIBLE | WS_BORDER | WS_VSCROLL | ES_BASELINE | ES_AUTOWRAP, 10, 80, 380, 70, IDC_CHARS, "", 0 }, { CTRL_BUTTON, WS_TABSTOP | WS_VISIBLE | BS_DEFPUSHBUTTON, 170, 160, 60, 25, IDOK, "确定", 0 }};static void my_notif_proc (HWND hwnd, int id, int nc, DWORD add_data){ unsigned char buff [256]; if (id == IDC_CHAR && nc == EN_CHANGE) { GetWindowText (hwnd, buff, 4); SendMessage (hwnd, EM_SETCARETPOS, 0, 0); SendMessage (GetDlgItem (GetParent (hwnd), IDC_CHARS), MSG_CHAR, buff[0], 0L); } else if (id == IDC_CHARS && nc == EN_CHANGE) { GetWindowText (hwnd, buff, 255); printf ("String: %s\n", buff); }} static int InputCharDialogBoxProc (HWND hDlg, int message, WPARAM wParam, LPARAM lParam){ static PLOGFONT my_font; HWND hwnd; switch (message) { case MSG_INITDIALOG: my_font = CreateLogFont (NULL, "Arial", "ISO8859-1", FONT_WEIGHT_REGULAR, FONT_SLANT_ROMAN, FONT_SETWIDTH_NORMAL, FONT_SPACING_CHARCELL, FONT_UNDERLINE_NONE, FONT_STRUCKOUT_NONE, 30, 0); hwnd = GetDlgItem (hDlg, IDC_CHAR); SetNotificationCallback (hwnd, my_notif_proc); SetWindowFont (hwnd, my_font); SendMessage (hwnd, MSG_KEYDOWN, SCANCODE_INSERT, 0L); hwnd = GetDlgItem (hDlg, IDC_CHARS); SetNotificationCallback (hwnd, my_notif_proc); SetFocus (hwnd); return 0; #if 0 case MSG_MOUSEMOVE: printf ("Mouse move: (%d, %d)\n", LOSWORD(lParam), HISWORD(lParam)); break; case MSG_LBUTTONDOWN: printf ("Mouse left button down\n"); break; case MSG_LBUTTONUP: printf ("Mouse left button released\n"); break;#endif case MSG_COMMAND: switch (wParam) { case IDOK: case IDCANCEL: DestroyLogFont (my_font); EndDialog (hDlg, wParam); break; } break; } return DefaultDialogProc (hDlg, message, wParam, lParam);}#define NR_KEYS_MP 10#define LOOP_THRESHOLD 100typedef struct _MP_KEYPAD_INFO{ unsigned char keys [NR_KEYS_MP]; unsigned char *candidates [NR_KEYS_MP]; unsigned int time_last; int last_down; int cur_candidate;} MP_KEYPAD_INFO;static int get_keypad_key (MP_KEYPAD_INFO* keypad_info, unsigned char key){ int i; for (i = 0; i < NR_KEYS_MP; i++) { if (key == keypad_info->keys [i]) return i; } return -1;}static int mobile_phone_keypad_hook (void *context, HWND dst_wnd, int msg, WPARAM wparam, LPARAM lparam){ MP_KEYPAD_INFO* keypad_info = (MP_KEYPAD_INFO*) context; if (msg == MSG_KEYDOWN || msg == MSG_KEYUP) { int down; unsigned int cur_time = GetTickCount (); down = get_keypad_key (keypad_info, LOBYTE(wparam)); if (down >= 0) { if (msg == MSG_KEYUP) return HOOK_STOP; if (keypad_info->last_down != down) { keypad_info->last_down = down; keypad_info->cur_candidate = 0; keypad_info->time_last = cur_time; } else { if (cur_time - keypad_info->time_last <= LOOP_THRESHOLD) { keypad_info->time_last = cur_time; keypad_info->cur_candidate ++; if (keypad_info->candidates [down][keypad_info->cur_candidate] == '\0') { keypad_info->cur_candidate = 0; } /* delete the old character. */ PostMessage (dst_wnd, MSG_KEYDOWN, SCANCODE_BACKSPACE, 0L); PostMessage (dst_wnd, MSG_KEYUP, SCANCODE_BACKSPACE, 0L); } else { keypad_info->last_down = down; keypad_info->cur_candidate = 0; keypad_info->time_last = cur_time; } } if (keypad_info->candidates >= 0) { PostMessage (dst_wnd, MSG_CHAR, keypad_info->candidates [down][keypad_info->cur_candidate], 0L); return HOOK_STOP; } } } return HOOK_GOON;}static MP_KEYPAD_INFO mp_keypad_info = { { SCANCODE_0, SCANCODE_1, SCANCODE_2, SCANCODE_3, SCANCODE_4, SCANCODE_5, SCANCODE_6, SCANCODE_7, SCANCODE_8, SCANCODE_9 }, { "0 ", "1.:/", "2abc", "3def", "4ghi", "5jkl", "6mno", "7pqrs", "8tuv", "9wxyz" }, 0, -1, -1};int MiniGUIMain (int argc, const char* argv[]){#ifdef _LITE_VERSION SetDesktopRect(0, 0, 1024, 768); if (!InitVectorialFonts ()) { printf ("InitVectorialFonts: error.\n"); return 1; }#endif RegisterKeyMsgHook (&mp_keypad_info, mobile_phone_keypad_hook); DlgBoxInputChar.controls = CtrlInputChar; DialogBoxIndirectParam (&DlgBoxInputChar, HWND_DESKTOP, InputCharDialogBoxProc, 0L);#ifdef _LITE_VERSION TermVectorialFonts ();#endif return 0;}#ifndef _LITE_VERSION#include <minigui/dti.c>#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -