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

📄 edillo.c

📁 嵌入式下基于MiniGUI的Web Browser
💻 C
📖 第 1 页 / 共 2 页
字号:
    }    if (message == MGD_NAV_BACKWARD)        a_Nav_back (bw);    else        a_Nav_forw (bw);    return 0;}static void on_keydown (HWND hwnd, int scancode, DWORD ks){    BrowserWindow* bw = (BrowserWindow*) GetWindowAdditionalData2 (hwnd);    DwViewport* viewport = (DwViewport*)bw->viewport;    long world_height = 0;    if (viewport == NULL || viewport->child == NULL) {        return;    }    world_height = viewport->child->allocation.ascent             + viewport->child->allocation.descent;    switch (scancode) {    case SCANCODE_HOME:        MGD_scroll_to_x (viewport, 0);        MGD_scroll_to_y (viewport, 0);        break;    case SCANCODE_END:        MGD_scroll_to_y (viewport, world_height);         break;    case SCANCODE_CURSORBLOCKDOWN:        on_vscrollbar (hwnd, SB_LINEDOWN, 0);        break;    case SCANCODE_CURSORBLOCKUP:        on_vscrollbar (hwnd, SB_LINEUP, 0);        break;    case SCANCODE_CURSORBLOCKRIGHT:        on_hscrollbar (hwnd, SB_LINERIGHT, 0);        break;    case SCANCODE_CURSORBLOCKLEFT:        on_hscrollbar (hwnd, SB_LINELEFT, 0);        break;    case SCANCODE_PAGEDOWN:#ifdef ENABLE_DIGITAL_LINK      if(current_link_number <= 8);          current_link_number++;      break;#endif        if (ks & KS_ALT)            on_hscrollbar (hwnd, SB_PAGERIGHT, 0);        else            on_vscrollbar (hwnd, SB_PAGEDOWN, 0);        break;    case SCANCODE_PAGEUP:#ifdef ENABLE_DIGITAL_LINK      if(current_link_number >= 1)          current_link_number--;      break;#endif        if (ks & KS_ALT)            on_hscrollbar (hwnd, SB_PAGELEFT, 0);        else            on_vscrollbar (hwnd, SB_PAGEUP, 0);        break;    case SCANCODE_F:        if (ks & KS_CTRL)            navigation (hwnd, MGD_NAV_FORWARD);        break;    case SCANCODE_B:        if (ks & KS_CTRL)            navigation (hwnd, MGD_NAV_BACKWARD);        break;#ifdef ENABLE_DIGITAL_LINK   case SCANCODE_ENTER:       a_Nav_push(bw, digital_address[current_link_number].url_address);       break;   case SCANCODE_0:   case SCANCODE_1:   case SCANCODE_2:   case SCANCODE_3:   case SCANCODE_4:   case SCANCODE_5:   case SCANCODE_6:   case SCANCODE_7:   case SCANCODE_8:   case SCANCODE_9:       a_Nav_push(bw, digital_address[scancode - SCANCODE_0].url_address);       break;#endif   default:      printf(">> Key pressed!\n");      break;    }}static BOOL focus_on_child (HWND hwnd, int scancode, DWORD ks){    HWND hCurFocus;    HWND hNewFocus;    hCurFocus = GetFocusChild (hwnd);    if (!hCurFocus)        return FALSE;    if (SendMessage (hCurFocus, MSG_GETDLGCODE, 0, 0L) & DLGC_WANTALLKEYS)        return TRUE;    switch (scancode)    {        case SCANCODE_CURSORBLOCKDOWN:        case SCANCODE_CURSORBLOCKUP:        case SCANCODE_CURSORBLOCKRIGHT:        case SCANCODE_CURSORBLOCKLEFT:        {            if (hCurFocus && SendMessage (hCurFocus,                                     MSG_GETDLGCODE, 0, 0L) & DLGC_WANTARROWS)                return TRUE;            if (scancode == SCANCODE_CURSORBLOCKDOWN                    || scancode == SCANCODE_CURSORBLOCKRIGHT)                hNewFocus = GetNextDlgGroupItem (hwnd, hCurFocus, FALSE);            else                hNewFocus = GetNextDlgGroupItem (hwnd, hCurFocus, TRUE);                        if (hNewFocus != hCurFocus) {                if (SendMessage (hCurFocus, MSG_GETDLGCODE, 0, 0L)                                 & DLGC_STATIC)                    break;                SetFocus (hNewFocus);                if (SendMessage (hNewFocus, MSG_GETDLGCODE, 0, 0L)                        & DLGC_RADIOBUTTON) {                    SendMessage (hNewFocus, BM_CLICK, 0, 0L);                    ExcludeWindowStyle (hCurFocus, WS_TABSTOP);                    IncludeWindowStyle (hNewFocus, WS_TABSTOP);                }            }        }        break;        case SCANCODE_TAB:        {#if 0            if (hCurFocus && SendMessage (hCurFocus,                                     MSG_GETDLGCODE, 0, 0L) & DLGC_WANTTAB)                break;#endif            if (ks & KS_SHIFT)                hNewFocus = GetNextDlgTabItem (hwnd, hCurFocus, TRUE);            else                hNewFocus = GetNextDlgTabItem (hwnd, hCurFocus, FALSE);            if (hNewFocus != hCurFocus) {                SetFocus (hNewFocus);            }            break;        }        default:        break;    }    return TRUE;}static int eDilloControlProc (HWND hwnd,                 int message, WPARAM wParam, LPARAM lParam){    HDC hdc;    switch (message) {    case MSG_CREATE:        SendNotifyMessage (hwnd, MGD_REALIZED, 0, 0);        return 0;    case MSG_PAINT:        hdc = BeginPaint (hwnd);        on_paint (hwnd, hdc);        EndPaint (hwnd, hdc);        return 0;    case MSG_HSCROLL:        on_hscrollbar (hwnd, wParam, lParam);        break;    case MSG_VSCROLL:        on_vscrollbar (hwnd, wParam, lParam);        break;    case MSG_KEYDOWN:        if (!focus_on_child (hwnd, LOWORD(wParam), lParam))            on_keydown (hwnd, LOWORD (wParam), lParam);        break;    case MSG_LBUTTONUP:        SetFocus (hwnd);    case MSG_MOUSEMOVE:    case MSG_LBUTTONDOWN:        on_mouse_event (hwnd, LOSWORD (lParam), HISWORD (lParam),                     MAKELONG (wParam, message));        break;    case MSG_DESTROY:        on_destroy (hwnd);        break;    case MGD_REALIZED:        on_realized (hwnd, GetWindowCaption (hwnd));        break;    case MGD_OPENURL:        return MGD_open_url (hwnd, (const char*)lParam);#if 0    case MGD_NAV_BACKWARD:    case MGD_NAV_FORWARD:        return navigation (hwnd, message);#endif    case MGD_RESETCONTENT:        reset_content ((BrowserWindow*) GetWindowAdditionalData2 (hwnd));        return 0;    case MGD_RESIZE:        {            BrowserWindow* bw = (BrowserWindow*)GetWindowAdditionalData2 (hwnd);            return a_Dw_viewport_draw_resize ((DwViewport*)bw->viewport);        }    }    return DefaultControlProc (hwnd, message, wParam, lParam);}static BOOL register_edillo_control (void){    WNDCLASS MyClass;    MyClass.spClassName = CTRL_DILLO;    MyClass.dwStyle     = WS_NONE;    MyClass.dwExStyle   = WS_EX_NONE;    MyClass.hCursor     = GetSystemCursor (IDC_ARROW);    MyClass.iBkColor    = COLOR_lightwhite;    MyClass.WinProc     = eDilloControlProc;    return RegisterWindowClass (&MyClass);}static void unregister_edillo_control (void){    UnregisterWindowClass (CTRL_DILLO);}BOOL edillo_init (void){    a_Prefs_init ();    a_Dns_init ();    a_Http_init ();#ifdef ENABLE_SSL    a_Https_SSL_init ();#endif    a_Mime_init ();    a_Cache_init ();    a_Dicache_init ();    a_Dw_style_init ();    a_Interface_init ();#ifdef ENABLE_COOKIES    a_Cookies_init ();#endif    if (!register_edillo_control ()) {        return FALSE;    }    return TRUE;}void edillo_cleanup (void){    unregister_edillo_control ();    a_Dicache_freeall ();    a_Cache_freeall ();#ifdef ENABLE_SSL    a_Https_freeall ();    #endif    a_Http_freeall ();    a_Dns_freeall ();#ifdef ENABLE_COOKIES    a_Cookies_freeall ();#endif    a_Dw_style_freeall ();    a_Prefs_freeall ();    a_History_free ();}

⌨️ 快捷键说明

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