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

📄 scrolled.h

📁 在ADS环境下MiniGUI的源码
💻 H
字号:
/*
** $Id: scrolled.h,v 1.10 2004/10/18 00:49:28 snig Exp $ 
**
** scrolled.h: header file of scrolled window support module.
**
** Copyright (C) 2004 Feynman Software.
*/

#ifndef _SCROLLED_H
#define _SCROLLED_H

#ifdef __cplusplus
extern "C"
{
#endif


/* default size and position values */
#define HSCROLL                 5   // h scroll value
#define VSCROLL                 15  // v scroll value

typedef struct _scrdata
{
    unsigned short hScrollVal;
    unsigned short vScrollVal;
    unsigned short hScrollPageVal;
    unsigned short vScrollPageVal;

    /* scroll offset */
    int nContX;
    int nContY;
    /* content range */
    int nContWidth;
    int nContHeight;
    /* visible content range */
    unsigned short visibleWidth;
    unsigned short visibleHeight;

    /* content margins */
    unsigned short leftMargin;
    unsigned short topMargin;
    unsigned short rightMargin;
    unsigned short bottomMargin;

    HWND hSV;

    /* scrollbar mode */
    SBPolicyType sbPolicy;

    void (*move_content) (HWND, struct _scrdata *, BOOL);

} SCRDATA;
typedef SCRDATA *PSCRDATA;


int     DefaultScrolledProc (HWND hWnd, int message, WPARAM wParam, LPARAM lParam);
int     scrolled_init (HWND hWnd, PSCRDATA pscrdata, int w, int h);
void    scrolled_destroy (PSCRDATA pscrdata);
void    scrolled_hscroll (HWND hWnd, PSCRDATA pscrdata, WPARAM wParam, LPARAM lParam);
void    scrolled_vscroll (HWND hWnd, PSCRDATA pscrdata, WPARAM wParam, LPARAM lParam);
void    scrolled_reset_content (HWND hWnd, PSCRDATA pscrdata);
int     scrolled_set_cont_height (HWND hWnd, PSCRDATA pscrdata, int cont_h);
int     scrolled_set_cont_width (HWND hWnd, PSCRDATA pscrdata, int cont_w);
BOOL    scrolled_set_cont_pos (HWND hWnd, PSCRDATA pscrdata, int cont_x, int cont_y);
BOOL    scrolled_make_pos_visible (HWND hWnd, PSCRDATA pscrdata, int pos_x, int pos_y);
void    scrolled_refresh_container (HWND hWnd, PSCRDATA pscrdata);
void    scrolled_set_scrollval (PSCRDATA pscrdata, int hval, int vval);
void    scrolled_set_scrollpageval (PSCRDATA pscrdata, int hval, int vval);
int     scrolled_set_hscrollinfo (HWND hWnd, PSCRDATA pscrdata);
int     scrolled_set_vscrollinfo (HWND hWnd, PSCRDATA pscrdata);
void    scrolled_init_contsize (HWND hWnd, PSCRDATA pscrdata);
void    scrolled_set_visible (HWND hWnd, PSCRDATA pscrdata);
int     scrolled_content_to_visible (PSCRDATA pscrdata, int *x, int *y);
int     scrolled_visible_to_content (PSCRDATA pscrdata, int *x, int *y);
void    scrolled_recalc_areas (HWND hWnd, PSCRDATA pscrdata, int new_w, int new_h);
void    scrolled_init_margins (PSCRDATA pscrdata, int left, int top,
                               int right, int bottom);
void    scrolled_refresh_rect (PSCRDATA pscrdata, RECT *rc);
void    scrolled_set_margins (PSCRDATA pscrdata, RECT *rc);


static inline int scrolled_get_contwidth (PSCRDATA pscrdata)
{
    return pscrdata->nContWidth;
}

static inline void scrolled_set_content (HWND hWnd, PSCRDATA pscrdata, BOOL visChanged)
{
    pscrdata->move_content (hWnd, pscrdata, visChanged);
}

static inline void scrolled_get_content_rect (PSCRDATA pscrdata, RECT *rc)
{
    if (rc) {
        rc->left = -pscrdata->nContX;
        rc->top = -pscrdata->nContY;
        rc->right = rc->left + pscrdata->nContWidth;
        rc->bottom = rc->top + pscrdata->nContHeight;
    }
}

/* decides whether a position in the virtual content window is visible */
static inline BOOL scrolled_is_pos_visible (PSCRDATA pscrdata, int x, int y)
{
    if (x < pscrdata->nContX || x > pscrdata->nContX + pscrdata->visibleWidth ||
               y < pscrdata->nContY || y > pscrdata->nContY + pscrdata->visibleHeight)
        return FALSE;
    return TRUE;
}
    
/* ------------------------------------------------------------------------- */
// newly added

static inline void scrolled_visible_to_window (PSCRDATA pscrdata, int *x, int *y)
{
    if (x)
        *x += pscrdata->leftMargin;
    if (y)
        *y += pscrdata->topMargin;
}

static inline void scrolled_window_to_visible (PSCRDATA pscrdata, int *x, int *y)
{
    if (x)
        *x -= pscrdata->leftMargin;
    if (y)
        *y -= pscrdata->topMargin;
}

static inline void scrolled_content_to_window (PSCRDATA pscrdata, int *x, int *y)
{
    scrolled_content_to_visible (pscrdata, x, y);
    scrolled_visible_to_window (pscrdata, x, y);
}

static inline void scrolled_window_to_content (PSCRDATA pscrdata, int *x, int *y)
{
    scrolled_window_to_visible (pscrdata, x, y);
    scrolled_visible_to_content (pscrdata, x, y);
}

static inline void scrolled_get_margins (PSCRDATA pscrdata, RECT *rc)
{
    if (rc) {
        rc->left = pscrdata->leftMargin;
        rc->top = pscrdata->topMargin;
        rc->right = pscrdata->rightMargin;
        rc->bottom = pscrdata->bottomMargin;
    }
}

static inline void scrolled_get_visible_rect (PSCRDATA pscrdata, RECT *rcVis)
{
    if (rcVis) {
        rcVis->left = pscrdata->leftMargin;
        rcVis->top = pscrdata->topMargin;
        rcVis->right = pscrdata->leftMargin + pscrdata->visibleWidth;
        rcVis->bottom = pscrdata->topMargin + pscrdata->visibleHeight;
    }
}
            
static inline void scrolled_refresh_content (PSCRDATA pscrdata)
{
    RECT rcVis;

#if 1
    scrolled_get_visible_rect (pscrdata, &rcVis);
    InvalidateRect (pscrdata->hSV, &rcVis, TRUE);
#else
    InvalidateRect (pscrdata->hSV, NULL, TRUE);
#endif
}

/* ------------------------------------------------------------------------- */


#ifdef __cplusplus
}
#endif  /* __cplusplus */

#endif  /* _SCROLLED_H */

⌨️ 快捷键说明

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