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

📄 scrolled.c

📁 有了操作系统、TCP/IP协议栈、文件系统
💻 C
📖 第 1 页 / 共 2 页
字号:
    svVScroll (vscroll, newpos);}int scrolled_set_cont_width (HWND hWnd, PSCRDATA pscrdata, int cont_w){    int oldval = pscrdata->nContWidth;    if (cont_w < 0)        return 0;    pscrdata->nContWidth = cont_w < pscrdata->visibleWidth ? pscrdata->visibleWidth : cont_w;    if (pscrdata->nContWidth == oldval)        return 0;    if (pscrdata->nContX > pscrdata->nContWidth - pscrdata->visibleWidth)        pscrdata->nContX = pscrdata->nContWidth - pscrdata->visibleWidth;    scrolled_set_hscrollinfo (hWnd, pscrdata);    //move content    scrolled_set_content (hWnd, pscrdata, FALSE);    return pscrdata->nContWidth;}int scrolled_set_cont_height (HWND hWnd, PSCRDATA pscrdata, int cont_h){    int oldval = pscrdata->nContHeight;    if (cont_h < 0)        return 0;    pscrdata->nContHeight = cont_h < pscrdata->visibleHeight ? pscrdata->visibleHeight : cont_h;    if (pscrdata->nContHeight == oldval)        return 0;    if (pscrdata->nContY > pscrdata->nContHeight - pscrdata->visibleHeight)        pscrdata->nContY = pscrdata->nContHeight - pscrdata->visibleHeight;    scrolled_set_vscrollinfo (hWnd, pscrdata);    //move content    scrolled_set_content (hWnd, pscrdata, FALSE);    return pscrdata->nContHeight;}/*int scrolled_SetVisibleWidth (HWND hWnd, PSCRDATA pscrdata, int vis_w){    int oldval = pscrdata->visibleWidth;    if (vis_w < 0)        return 0;    pscrdata->visibleWidth = vis_w < pscrdata->nContWidth ? vis_w : pscrdata->nContWidth;    if (pscrdata->visibleWidth = oldval)        return 0;    scrolled_set_hscrollinfo (hWnd, pscrdata);    return pscrdata->visibleWidth;}*/void scrolled_set_scrollval (PSCRDATA pscrdata, int hval, int vval){    if (hval > 0)        pscrdata->hScrollVal = hval;    if (vval > 0)        pscrdata->vScrollVal = vval;}void scrolled_set_scrollpageval (PSCRDATA pscrdata, int hval, int vval){    if (hval > 0)        pscrdata->hScrollPageVal = hval;    if (vval > 0)        pscrdata->vScrollPageVal = vval;}void scrolled_set_margins (PSCRDATA pscrdata, RECT *rc){    RECT rcWnd;    if (!rc)        return;    if (rc->left >= 0)        pscrdata->leftMargin = rc->left;    if (rc->right >= 0)        pscrdata->rightMargin = rc->right;    if (rc->top >= 0)        pscrdata->topMargin = rc->top;    if (rc->bottom >= 0)        pscrdata->bottomMargin = rc->bottom;    GetClientRect (pscrdata->hSV, &rcWnd);    scrolled_recalc_areas (pscrdata->hSV, pscrdata,        RECTW(rcWnd) - pscrdata->leftMargin - pscrdata->rightMargin,        RECTH(rcWnd) - pscrdata->topMargin - pscrdata->bottomMargin);}void scrolled_refresh_rect (PSCRDATA pscrdata, RECT *rc){    RECT rcUpdate;    memcpy (&rcUpdate, rc, sizeof(RECT));    scrolled_content_to_window (pscrdata, NULL, &rcUpdate.top);    rcUpdate.bottom = rcUpdate.top + RECTHP(rc);    if (rcUpdate.right == 0) {        rcUpdate.left = 0;        scrolled_content_to_window (pscrdata, &rcUpdate.left, NULL);        rcUpdate.right = rcUpdate.left + pscrdata->visibleWidth;/*        rcUpdate.left = pscrdata->leftMargin;        rcUpdate.right = pscrdata->leftMargin + pscrdata->visibleWidth;*/    }    InvalidateRect ( pscrdata->hSV, &rcUpdate, TRUE);}void scrolled_init_contsize (HWND hWnd, PSCRDATA pscrdata){    pscrdata->nContX = 0;    pscrdata->nContY = 0;    pscrdata->nContWidth = pscrdata->visibleWidth;    pscrdata->nContHeight = pscrdata->visibleHeight;}void scrolled_init_margins (PSCRDATA pscrdata, int left, int top,                             int right, int bottom){    pscrdata->leftMargin = left;    pscrdata->topMargin = top;    pscrdata->rightMargin = right;    pscrdata->bottomMargin = bottom;}/* set initial content size and viewport size */int scrolled_init (HWND hWnd, PSCRDATA pscrdata, int w, int h){    RECT rcWnd;    /* new added */    pscrdata->leftMargin = 0;    pscrdata->topMargin = 0;    pscrdata->rightMargin = 0;    pscrdata->bottomMargin = 0;    pscrdata->nContX = 0;    pscrdata->nContY = 0;    if (w > 0 && h > 0) {        pscrdata->visibleWidth = w;        pscrdata->visibleHeight = h;    }    else {        GetClientRect (hWnd, &rcWnd);        pscrdata->visibleWidth = RECTW(rcWnd);        pscrdata->visibleHeight = RECTH(rcWnd);    }    pscrdata->nContWidth = pscrdata->visibleWidth;     pscrdata->nContHeight = pscrdata->visibleHeight;     pscrdata->sbPolicy = SB_POLICY_AUTOMATIC;    pscrdata->hScrollVal = HSCROLL;    pscrdata->vScrollVal = VSCROLL;    pscrdata->hScrollPageVal = pscrdata->visibleWidth;    pscrdata->vScrollPageVal = pscrdata->visibleHeight;    pscrdata->hSV = hWnd;    return 0;}int DefaultScrolledProc (HWND hWnd, int message, WPARAM wParam, LPARAM lParam){    PSCRDATA pscrdata = NULL;    if (message != MSG_CREATE)        pscrdata = (PSCRDATA) GetWindowAdditionalData2 (hWnd);    switch (message) {    case MSG_HSCROLL:        scrolled_hscroll (hWnd, pscrdata, wParam, lParam);        break;    case MSG_VSCROLL:        scrolled_vscroll (hWnd, pscrdata, wParam, lParam);        break;    /*      * three cases:      * 1. move window; 2. set content range; 3. show scrollbar     */    case MSG_SIZECHANGED:    {        RECT *rcClient = (RECT*)lParam;        //default case : the whole client area is the visible area        //scrollwnd control is this case        //scrollview control is different        if (!pscrdata)            return 0;        //scrolled_recalc_areas (hWnd, pscrdata, RECTWP(rcClient), RECTHP(rcClient));        scrolled_recalc_areas (hWnd, pscrdata,                         RECTWP(rcClient) - pscrdata->leftMargin - pscrdata->rightMargin,                        RECTHP(rcClient) - pscrdata->topMargin - pscrdata->bottomMargin);        return 0;    }    case MSG_KEYDOWN:    {        if (wParam == SCANCODE_PAGEDOWN) {            SendMessage (hWnd, MSG_VSCROLL, SB_PAGEDOWN, 0);        }        else if (wParam == SCANCODE_PAGEUP)            SendMessage (hWnd, MSG_VSCROLL, SB_PAGEUP, 0);        else if (wParam == SCANCODE_CURSORBLOCKLEFT)            SendMessage (hWnd, MSG_HSCROLL, SB_PAGELEFT, 0);        else if (wParam == SCANCODE_CURSORBLOCKRIGHT)            SendMessage (hWnd, MSG_HSCROLL, SB_PAGERIGHT, 0);        break;    }    case SVM_SETCONTRANGE:        scrolled_set_cont_width (hWnd, pscrdata, wParam);        scrolled_set_cont_height (hWnd, pscrdata, lParam);        return 0;    case SVM_SETCONTWIDTH:        return scrolled_set_cont_width (hWnd, pscrdata, wParam);    case SVM_SETCONTHEIGHT:        return scrolled_set_cont_height (hWnd, pscrdata, wParam);    case SVM_GETHSCROLLVAL:        return pscrdata->hScrollVal;    case SVM_GETVSCROLLVAL:        return pscrdata->vScrollVal;    case SVM_GETHSCROLLPAGEVAL:        return pscrdata->hScrollPageVal;    case SVM_GETVSCROLLPAGEVAL:        return pscrdata->vScrollPageVal;    case SVM_SETSCROLLVAL:    {        scrolled_set_scrollval (pscrdata, wParam, lParam);        return 0;    }    case SVM_SETSCROLLPAGEVAL:    {        scrolled_set_scrollpageval (pscrdata, wParam, lParam);        return 0;    }    case SVM_SETCONTPOS:    {        scrolled_set_cont_pos (hWnd, pscrdata, wParam, lParam);        return 0;    }    /* get scrolled size information */    case SVM_GETCONTWIDTH:        return pscrdata->nContWidth;    case SVM_GETCONTHEIGHT:        return pscrdata->nContHeight;    case SVM_GETCONTENTX:        return pscrdata->nContX;    case SVM_GETCONTENTY:        return pscrdata->nContY;    case SVM_GETVISIBLEWIDTH:        return pscrdata->visibleWidth;    case SVM_GETVISIBLEHEIGHT:        return pscrdata->visibleHeight;    case SVM_GETMARGINS:    {        RECT *rc = (RECT *)lParam;        if (rc)            scrolled_get_margins (pscrdata, rc);        return 0;    }    case SVM_GETLEFTMARGIN:        return pscrdata->leftMargin;    case SVM_GETRIGHTMARGIN:        return pscrdata->rightMargin;    case SVM_GETTOPMARGIN:        return pscrdata->topMargin;    case SVM_GETBOTTOMMARGIN:        return pscrdata->bottomMargin;    case SVM_SETMARGINS:    {        RECT *rc = (RECT *)lParam;        if (rc)            scrolled_set_margins (pscrdata, rc);        return 0;    }    case SVM_MAKEPOSVISIBLE:        scrolled_make_pos_visible (hWnd, pscrdata, wParam, lParam);        return 0;    }/* end switch */    return DefaultControlProc (hWnd, message, wParam, lParam);}#endif /* _CTRL_SCROLLVIEW */

⌨️ 快捷键说明

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