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

📄 edit.c

📁 这是一个MiniGUI的开发例子库 具有各种典型控件实现的源代码
💻 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 + -