亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? scrollwnd.c

?? MINIGUI 加UCOS 很好的源代碼 找了好久才找到了 拿出來與大家一起分享!
?? C
字號:
/*
** $Id: scrollwnd.c,v 1.8 2004/10/18 00:49:28 snig Exp $
**
** scrollwnd.c: scrollwnd control, a scrollable container window
**
** Copyright (C) 2004 Feynman Software.
** 
** Current maintainer: Zhong Shuyi (zhongsy@minigui.org).
**
** Create date: 2004/03/01
*/

/*
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation; either version 2 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program; if not, write to the Free Software
** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

#include "common.h"
#include "minigui.h"
#include "gdi.h"
#include "window.h"
#include "control.h"
#include "cliprect.h"
#include "internals.h"
#include "ctrlclass.h"

#ifdef _CTRL_SCROLLVIEW

#include "ctrlmisc.h"
#include "scrolled.h"
#include "scrollwnd.h"

/* ---------------------------------------------------------------------------- */
/* internal used static function declarations */
static BOOL RegisterContainer (void);
static void container_reset_content (HWND hWnd, PCONTDATA pcontdata);

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

/* adjust the position and size of the container window */
static void scrollwnd_set_container (HWND hWnd, PSCRDATA pscrdata, BOOL visChanged)
{
    PSWDATA pswdata = (PSWDATA) GetWindowAdditionalData2 (hWnd);

    MoveWindow (pswdata->hContainer, -pscrdata->nContX, -pscrdata->nContY,
                pscrdata->nContWidth,
                pscrdata->nContHeight, TRUE);
}

int scrollwnd_add_controls (HWND hWnd, PSWDATA pswdata, 
                             int ctrl_nr, PCTRLDATA pCtrlData)
{
    int i;
    HWND hCtrl;

    if (!pCtrlData || ctrl_nr <= 0)
        return -1;

    for (i = 0; i < ctrl_nr; i++) {
        hCtrl = CreateWindowEx (pCtrlData->class_name,
                                pCtrlData->caption,
                                pCtrlData->dwStyle | WS_CHILD,
                                pCtrlData->dwExStyle,
                                pCtrlData->id,
                                pCtrlData->x, pCtrlData->y,
                                pCtrlData->w, pCtrlData->h,
                                pswdata->hContainer,
                                pCtrlData->dwAddData);

        if (hCtrl == HWND_INVALID) {
            return FALSE;
        }

        pCtrlData ++;
    }

    return 0;
}

static void create_container (HWND hWnd, PSWDATA pswdata)
{
    PCONTAINERINFO cont_info = (PCONTAINERINFO) GetWindowAdditionalData(hWnd);

#if 0
    if (cont_info) {
        pswdata->nContX = cont_info->x;
        pswdata->nContY = cont_info->y;
        if (cont_info->w > 0) pswdata->nContWidth = cont_info->w;
        if (cont_info->h > 0) pswdata->nContHeight = cont_info->h;
    }
#endif

    pswdata->hContainer = CreateWindowEx (CTRL_CONTAINER, "", 
                            WS_VISIBLE, WS_EX_NONE,
                            IDC_STATIC,
                            pswdata->scrdata.nContX, pswdata->scrdata.nContY,
                            pswdata->scrdata.nContWidth, pswdata->scrdata.nContHeight,
                            hWnd, 0);

    pswdata->pContdata = (PCONTDATA) GetWindowAdditionalData2 (pswdata->hContainer);

    if (cont_info && cont_info->user_proc)
        SetWindowCallbackProc (pswdata->hContainer, cont_info->user_proc);

    if (cont_info && (cont_info->controlnr > 0))
        scrollwnd_add_controls (hWnd, pswdata, cont_info->controlnr, cont_info->controls);

    SendMessage (pswdata->hContainer, MSG_INITCONTAINER, 0, cont_info ? cont_info->dwAddData : 0);
}

/*
 * initialize scrollwnd internal structure
 */
static int svInitData (HWND hWnd, PSWDATA pswdata)
{
    scrolled_init (hWnd, &pswdata->scrdata, 0, 0);
    pswdata->scrdata.move_content = scrollwnd_set_container; 
    pswdata->flags = 0;

    create_container (hWnd, pswdata);
    return 0;
}

/* 
 * shoulded be called before scrollwnd is used
 * hWnd: the scrolled window
 */
int scrollwnd_init (HWND hWnd, PSWDATA pswdata)
{
    if (!pswdata)
        return -1;

    SetWindowAdditionalData2 (hWnd, 0);
    ShowScrollBar (hWnd, SB_HORZ, FALSE);
    ShowScrollBar (hWnd, SB_VERT, FALSE);

    svInitData (hWnd, pswdata);
    SetWindowAdditionalData2 (hWnd, (DWORD) pswdata);

    /* set scrollbar status */
    scrolled_set_hscrollinfo (hWnd, &pswdata->scrdata);
    scrolled_set_vscrollinfo (hWnd, &pswdata->scrdata);
                                    
    return 0;
}

/*
 * destroy a scrollwnd
 */
void scrollwnd_destroy (PSWDATA pswdata)
{
    DestroyWindow (pswdata->hContainer);
}

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

void scrollwnd_reset_content (HWND hWnd, PSWDATA pswdata)
{
    /* delete all container content */
    container_reset_content (pswdata->hContainer, pswdata->pContdata);

    if (pswdata->scrdata.sbPolicy != SB_POLICY_ALWAYS) {
        ShowScrollBar (hWnd, SB_HORZ, FALSE);
        ShowScrollBar (hWnd, SB_VERT, FALSE);
    }

    /* reset content and viewport size */
    scrolled_init_contsize (hWnd, &pswdata->scrdata);
    /* reset container window */
    //FIXME
    scrollwnd_set_container (hWnd, &pswdata->scrdata, TRUE);
    /* reset viewport window */
    scrolled_set_visible (hWnd, &pswdata->scrdata);

    scrolled_set_hscrollinfo (hWnd, &pswdata->scrdata);
    scrolled_set_vscrollinfo (hWnd, &pswdata->scrdata);

    //InvalidateRect (pswdata->hContainer, NULL, TRUE);
    scrollwnd_refresh_content (pswdata);
}

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

int ScrollWndCtrlProc (HWND hWnd, int message, WPARAM wParam, LPARAM lParam)
{
    PSWDATA pswdata = NULL;

    if (message != MSG_CREATE)
        pswdata = (PSWDATA) GetWindowAdditionalData2 (hWnd);

    switch (message) {

    case MSG_CREATE:
    {
        pswdata = (PSWDATA) malloc(sizeof (SWDATA));
        if (!pswdata)
            return -1;
        scrollwnd_init (hWnd, pswdata);
        break;
    }

    case MSG_DESTROY:
        scrollwnd_destroy (pswdata);
        free (pswdata);
        break;
    
    case MSG_ERASEBKGND:
        EditOnEraseBackground (hWnd, (HDC)wParam, (const RECT*)lParam);
        return 0;

    case MSG_GETDLGCODE:
        return DLGC_WANTTAB | DLGC_WANTARROWS;

    case SVM_ADDCTRLS:
    {
        int ctrl_nr = (int)wParam;
        PCTRLDATA pCtrlData = (PCTRLDATA)lParam;
        scrollwnd_add_controls (hWnd, pswdata, ctrl_nr, pCtrlData);
        return 0;
    }

    case SVM_GETCTRL:
        return GetDlgItem (pswdata->hContainer, wParam);

    case SVM_RESETCONTENT:
        scrollwnd_reset_content (hWnd, pswdata);
        return 0;

    case SVM_SETCONTAINERPROC:
        scrollwnd_set_container_proc (pswdata, (WNDPROC)lParam);
        return 0;

    case SVM_GETFOCUSCHILD:
        return (int)GetFocus (pswdata->hContainer);

    }/* end switch */

    return DefaultScrolledProc (hWnd, message, wParam, lParam);
}

BOOL RegisterScrollWndControl (void)
{
    WNDCLASS WndClass;

    if (!RegisterContainer ())
        return FALSE;

    WndClass.spClassName = CTRL_SCROLLWND;
    WndClass.dwStyle     = WS_NONE;
    WndClass.dwExStyle   = WS_EX_NONE;
    WndClass.hCursor     = GetSystemCursor (IDC_ARROW);
    WndClass.iBkColor    = GetWindowElementColor (BKC_CONTROL_DEF);
    WndClass.WinProc     = ScrollWndCtrlProc;

    return AddNewControlClass (&WndClass) == ERR_OK;
}

/* ------------------------------------ container --------------------------- */

static PCONTDATA container_init (HWND hWnd)
{
    PCONTDATA pcontdata;

    if ( !(pcontdata = (PCONTDATA) malloc (sizeof (CONTDATA))) )
        return NULL;

    pcontdata->hSV = GetParent(hWnd);
    pcontdata->flags = 0;

    SetWindowAdditionalData2 (hWnd, (DWORD) pcontdata);

    return pcontdata;
}

static void container_reset_content (HWND hWnd, PCONTDATA pcontdata)
{
    DestroyAllControls (hWnd);
}

static void container_destroy (HWND hWnd, PCONTDATA pcontdata)
{
    container_reset_content (hWnd, pcontdata);
    free (pcontdata);
}

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

int GUIAPI DefaultContainerProc (HWND hWnd, int message, WPARAM wParam, LPARAM lParam)
{
    PCONTDATA pcontdata = NULL;

    switch (message) {

    case MSG_CREATE:
        if ( !container_init (hWnd) )
            return -1;
        break;

    case MSG_DESTROY:
        pcontdata = (PCONTDATA) GetWindowAdditionalData2 (hWnd);
        container_destroy (hWnd, pcontdata);
        break;

    case MSG_ERASEBKGND:
        EditOnEraseBackground (hWnd, (HDC)wParam, (const RECT*)lParam);
        return 0;

    case MSG_COMMAND:
        pcontdata = (PCONTDATA) GetWindowAdditionalData2 (hWnd);
        SendNotifyMessage (GetParent(pcontdata->hSV), MSG_SVCONTCMD, wParam, lParam);
        break;

    } /* end switch */

    return DefaultPageProc (hWnd, message, wParam, lParam);
    //return DefaultControlProc (hWnd, message, wParam, lParam);
}

static BOOL RegisterContainer (void)
{
    WNDCLASS WndClass;

    WndClass.spClassName = CTRL_CONTAINER;
    WndClass.dwStyle     = WS_NONE;
    WndClass.dwExStyle   = WS_EX_NONE;
    WndClass.hCursor     = GetSystemCursor (IDC_ARROW);
    WndClass.iBkColor    = GetWindowElementColor (BKC_CONTROL_DEF);
    WndClass.WinProc     = DefaultContainerProc;

    return AddNewControlClass (&WndClass) == ERR_OK;
}

#endif /* _CTRL_SCROLLVIEW */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一三区三区四区免费在线看 | 99精品黄色片免费大全| 91九色最新地址| 精品久久久久香蕉网| 久久99精品国产.久久久久久 | 欧美性大战久久| 国产欧美精品一区二区色综合 | 国产精品全国免费观看高清 | 成人国产精品免费网站| 日韩女优av电影| 精品国产免费一区二区三区香蕉| 欧美tickle裸体挠脚心vk| 久久日一线二线三线suv| 精品毛片乱码1区2区3区| 欧美不卡一二三| 欧美va在线播放| 国产亚洲综合在线| 中文字幕制服丝袜一区二区三区| 欧美韩国日本不卡| 亚洲色图欧美激情| 视频一区视频二区在线观看| 久久国产综合精品| av不卡一区二区三区| 在线不卡的av| 国产女人aaa级久久久级 | 亚洲第一久久影院| 国产在线乱码一区二区三区| 成人爽a毛片一区二区免费| 在线亚洲一区二区| 精品国产乱码久久久久久蜜臀| 国产视频一区二区在线观看| 一区二区三区在线观看网站| 亚洲成人综合视频| 国产麻豆精品theporn| 欧美综合视频在线观看| 日韩亚洲欧美一区| 一区二区在线观看免费| 麻豆成人久久精品二区三区小说| 99久免费精品视频在线观看| 91精品国产入口| 专区另类欧美日韩| 国产在线精品一区二区不卡了| 91久久人澡人人添人人爽欧美| 日韩无一区二区| 一级日本不卡的影视| 国产精品亚洲第一| 91精品婷婷国产综合久久竹菊| 中文字幕av资源一区| 91福利视频久久久久| 97久久超碰精品国产| 欧美成人女星排行榜| 性做久久久久久久免费看| 国产精品一区免费在线观看| 欧美日韩三级视频| 亚洲天堂中文字幕| 成人性生交大合| 欧美videossexotv100| 视频一区二区国产| 欧美色大人视频| 亚洲特黄一级片| 成人精品在线视频观看| 久久综合色婷婷| 国产一区二区三区免费观看| 欧美久久久久久久久| 午夜视黄欧洲亚洲| 欧美在线不卡一区| 亚洲一本大道在线| 欧美性淫爽ww久久久久无| 亚洲精品网站在线观看| 成+人+亚洲+综合天堂| 中文字幕精品综合| 成人中文字幕电影| 国产午夜三级一区二区三| 国内外成人在线| 精品日产卡一卡二卡麻豆| 极品少妇一区二区三区精品视频| 日韩网站在线看片你懂的| 奇米影视一区二区三区小说| 91精品国产乱码| 精品一区二区三区av| 欧美videofree性高清杂交| 精品一区二区三区在线播放视频| 欧美v日韩v国产v| 国产乱人伦精品一区二区在线观看 | 国产丝袜在线精品| 国产传媒一区在线| 国产精品国产三级国产三级人妇| 国产高清精品网站| 亚洲欧美在线高清| 91福利在线观看| 秋霞国产午夜精品免费视频| 欧美不卡123| av电影在线观看完整版一区二区| 亚洲免费av观看| 欧美精品99久久久**| 久久精品国产秦先生| 亚洲国产经典视频| 在线免费视频一区二区| 图片区小说区区亚洲影院| 久久亚洲精品国产精品紫薇| 99在线精品观看| 午夜成人免费电影| 久久久久免费观看| 在线看日韩精品电影| 蜜桃视频一区二区三区| 国产免费成人在线视频| 欧美综合欧美视频| 国产一区二区三区综合| 国产精品伦一区| 欧美日韩精品欧美日韩精品一 | 成人天堂资源www在线| 亚洲成人资源在线| 国产欧美精品一区二区三区四区| 欧美性一区二区| 粉嫩av一区二区三区粉嫩 | 国产麻豆视频精品| 一区二区三区免费观看| 久久综合久久99| 欧美顶级少妇做爰| 91网页版在线| 国产一二三精品| 日韩中文字幕区一区有砖一区| 精品国产人成亚洲区| 欧美日韩久久久一区| 成人综合激情网| 美腿丝袜亚洲三区| 亚洲视频香蕉人妖| 欧美本精品男人aⅴ天堂| 99久久精品国产麻豆演员表| 久久国产尿小便嘘嘘尿| 亚洲综合激情网| 国产精品美女久久久久久久| 日韩欧美电影在线| 欧美日韩的一区二区| 日本精品一区二区三区高清| 成人午夜激情片| 国产夫妻精品视频| 蜜芽一区二区三区| 亚欧色一区w666天堂| 亚洲综合激情小说| 亚洲少妇最新在线视频| 国产精品视频在线看| 久久久蜜桃精品| 欧美v日韩v国产v| 日韩视频国产视频| 日韩精品一区二区在线观看| 337p亚洲精品色噜噜| 欧美丰满少妇xxxxx高潮对白| 欧美在线一二三| 在线免费观看日本一区| 色综合色狠狠综合色| 色视频成人在线观看免| 95精品视频在线| 色综合久久综合网| 色综合av在线| 欧美日韩国产综合一区二区 | 成人不卡免费av| 成人午夜电影久久影院| 成人一区二区三区视频| av一区二区三区在线| 一本色道**综合亚洲精品蜜桃冫| 99精品欧美一区二区蜜桃免费| 北条麻妃一区二区三区| 99国产精品久久久久| 欧美在线free| 6080午夜不卡| 国产亚洲欧美日韩在线一区| 欧美激情中文字幕| 一级中文字幕一区二区| 婷婷成人综合网| 另类的小说在线视频另类成人小视频在线 | 国产欧美日韩精品在线| 中文字幕制服丝袜成人av| 亚洲女与黑人做爰| 免费成人在线影院| 国产精品一区在线| 在线观看成人免费视频| 欧美人与禽zozo性伦| 日韩精品一区二区三区swag| 久久精品亚洲国产奇米99| 亚洲免费看黄网站| 久久er99热精品一区二区| 国产91精品久久久久久久网曝门| 一本大道久久a久久综合婷婷| 这里只有精品视频在线观看| 久久久99精品免费观看不卡| 一区二区高清在线| 国产乱子伦一区二区三区国色天香| 99久久er热在这里只有精品66| 欧美精品日日鲁夜夜添| 国产欧美一区二区三区鸳鸯浴| 亚洲色图.com| 国产精品一二三区| 91精品国产色综合久久不卡蜜臀 | 精品日产卡一卡二卡麻豆| 亚洲黄色性网站| 国产一区二区三区美女| 欧美视频一区二区三区在线观看| 久久综合九色综合欧美就去吻 | 中文字幕一区免费在线观看|