📄 scrolled.c
字号:
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 + -