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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? gizmo.c

?? 英文版的 想要的話可以下載了 為大家服務(wù)
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*
 * GIZMO.C
 *
 * Allocate, free, find, and enumerate functions for the GIZMO
 * structure and a generic subclass procedure to handle tabbing
 * between gizmos.
 *
 * Copyright (c)1993-1995 Microsoft Corporation, All Rights Reserved
 *
 * Kraig Brockschmidt, Microsoft
 * Internet  :  kraigb@microsoft.com
 * Compuserve:  >INTERNET:kraigb@microsoft.com
 */


#include "inoledll.h"


/*
 * In order to control tabbing in the gizmos, we need to subclass
 * real pushbuttons, edit controls, listboxes, and comboboxes.  So
 * we keep an array of the four original procs for such controls.
 */
WNDPROC     pfnOrg[CSUBGIZMOS]={NULL, NULL, NULL, NULL};


TCHAR szStatic[]=TEXT("static");
TCHAR szEdit[]=TEXT("edit");
TCHAR szCombobox[]=TEXT("combobox");
TCHAR szListbox[]=TEXT("listbox");
TCHAR szButton[]=TEXT("button");


//Here so GIZMOBAR.C can get at it.
TOOLDISPLAYDATA tdd;



/*
 * GizmoPAllocate
 *
 * Purpose:
 *  Allocates and initializes a GIZMO data structure.
 *
 * Parameters:
 *  pfSuccess       int * flag indicating success of failure.
 *  ppFirst         PPGIZMO providing the first gizmo in this list.
 *  hWndParent      HWND of the parent of this gizmo.  Can be NULL
 *                  for iType==GIZMOTYPE_BUTTON* or
 *                  GIZMOTYPE_SEPARATOR.
 *  iType           UINT gizmo control type.
 *  iGizmo          UINT index of this gizmo in the GizmoBar.
 *  uID             UINT identifier to send with WM_COMMAND for this
 *                  control.
 *  dx, dy          UINT width and height of the gizmo.
 *  pszText         LPTSTR to the text for edits, listboxes, combobox,
 *                  and text.
 *  dwStyle         DWORD style for edits, lists, and combos, and
 *                  texts.
 *  hBmp            HBITMAP for button gizmos, is applicable.
 *  iImage          UINT index into hBmp for the button image, if
 *                  applicable.
 *  uState          UINT initial state of the control.
 *
 * Return Value:
 *  PGIZMO          If NULL returned then GizmoPAllocate could not
 *                  allocate memory.  If a non-NULL pointer is
 *                  returned with *pfSuccess, then call GizmoPFree
 *                  immediately.  If you get a non-NULL pointer and
 *                  *pfSuccess==TRUE then the function succeeded.
 */

PGIZMO GizmoPAllocate(int *pfSuccess, PPGIZMO ppFirst
    , HWND hWndParent, UINT iType, UINT iGizmo, UINT uID, UINT dx
    , UINT dy, LPTSTR pszText, HBITMAP hBmp, UINT iImage, UINT uState)
    {
    PGIZMO          pGizmo;
    PGIZMO          pCur, pPrev;
    LPTSTR          pszClass;
    HINSTANCE       hInst;
    UINT            i;
    DWORD           dwStyle;
    HWND            hWndE;

    if (NULL==pfSuccess)
        return NULL;

    //Make sure we know of this gizmo type.
    if (GIZMOTYPE_MIN > iType || GIZMOTYPE_MAX < iType)
        return NULL;

    *pfSuccess=FALSE;

    //Allocate the structure
    pGizmo=(PGIZMO)(TCHAR *)LocalAlloc(LPTR, CBGIZMO);

    if (NULL==pGizmo)
        return NULL;


    //Store the necessary information for this gizmo.
    pGizmo->iType   =iType;
    pGizmo->uID     =uID;
    pGizmo->hBmp    =hBmp;
    pGizmo->iBmp    =iImage;
    pGizmo->uState  =uState;
    pGizmo->fNotify =TRUE;


    /*
     * Insert this structure into our gizmo list.  Each time we scan
     * we increment the index counter (starting at zero) comparing it
     * to the desired index of insertion.  We then know exactly where
     * to insert this new gizmo.  Note that we insert the new gizmo
     * in the list appropriately for the given owner, so enumerations
     * will come out ordered in the same way for that owner.
     */

    i=0;
    pCur=*ppFirst;
    pPrev=NULL;

    while (NULL!=pCur && i++ < iGizmo)
        {
        pPrev=pCur;
        pCur =pCur->pNext;
        }

    //Point to our neighbors
    pGizmo->pPrev=pPrev;
    pGizmo->pNext=pCur;


    //Point out neighbors to us.
    if (NULL==pPrev)
        *ppFirst=pGizmo;
    else
        pPrev->pNext=pGizmo;

    if (NULL!=pCur)
        pCur->pPrev=pGizmo;


    //Our x-coordinate is the x of the previous gizmo plus its width.
    if (NULL!=pPrev)
        pGizmo->x=pGizmo->pPrev->x+pGizmo->pPrev->dx;
    else
        pGizmo->x=4;    //First gizmo is at x=4


    //If we're a separator or image button, force standards on dx.
    UIToolConfigureForDisplay(&tdd);
    pGizmo->cxImage=tdd.cxImage;
    pGizmo->cyImage=tdd.cyImage;

    if ((GIZMOTYPE_DRAWN & iType) && NULL==hBmp)
        dx=tdd.cxButton;

    if (GIZMOTYPE_SEPARATOR==iType)
        dx=6;

    /*
     * Now create windows for edits, texts, lists, and comboboxes.
     * First calculate the most often defaults used in the switch.
     */
    pGizmo->dx=dx+6;
    pGizmo->dy=min(dy, tdd.cyButton);
    pGizmo->y=2;
    pszClass=NULL;

    //If this is new gizmo is a window, create it.
    switch (iType)
        {
        case GIZMOTYPE_TEXT:
            pGizmo->dx=dx;

            //Center vertically.
            pGizmo->y=(tdd.cyBar-1-pGizmo->dy) >> 1;
            pszClass=szStatic;
            dwStyle=SS_LEFT;
            break;

        case GIZMOTYPE_EDIT:
            //Center vertically.
            pGizmo->y=(tdd.cyBar-1-pGizmo->dy) >> 1;
            pszClass=szEdit;
            dwStyle=ES_LEFT | WS_BORDER | WS_TABSTOP;
            break;

        case GIZMOTYPE_LISTBOX:
            pGizmo->dy=dy;
            pszClass=szCombobox;
            dwStyle=CBS_DROPDOWNLIST | WS_TABSTOP;
            break;

        case GIZMOTYPE_COMBOBOX:
            pGizmo->dy=dy;
            pszClass=szCombobox;
            dwStyle=CBS_DROPDOWN | WS_TABSTOP;
            break;

        case GIZMOTYPE_BUTTONNORMAL:
            pGizmo->dy=dy;
            pszClass=szButton;
            dwStyle=BS_PUSHBUTTON | WS_TABSTOP;
            break;

        case GIZMOTYPE_SEPARATOR:
            pGizmo->dx=dx;
            pGizmo->y=3;
            break;

        case GIZMOTYPE_BUTTONATTRIBUTEIN:
        case GIZMOTYPE_BUTTONATTRIBUTEEX:
        case GIZMOTYPE_BUTTONCOMMAND:
            pGizmo->dx=dx;
            pGizmo->y=3;
            break;
        }


    //If we matched a classname, create a window.
    if (GIZMOTYPE_WINDOWS & iType)
        {
        if (!IsWindow(hWndParent))
            return pGizmo;

        hInst=GETWINDOWINSTANCE(hWndParent);    //Macro in book1632.h

        pGizmo->hWnd=CreateWindow(pszClass, pszText
            , dwStyle | WS_CHILD | WS_VISIBLE, pGizmo->x, pGizmo->y
            , dx, pGizmo->dy, hWndParent, (HMENU)uID, hInst, NULL);

        if (NULL==pGizmo->hWnd)
            return pGizmo;

        /*
         * Subclass comboboxes, listboxes, edits, and windowed
         * buttons.  We use iType to index the original proc array
         * so we can use a single subclass procedure for all
         * controls.  If you mess with the gizmo type definitions,
         * this is going to break.
         */

        if (GIZMOTYPE_WINDOWS & iType && GIZMOTYPE_TEXT!=iType)
            {
            //Give the window its type.
            BITPOSITION(iType, i);
            SetProp(pGizmo->hWnd, SZTYPEPROP, (HANDLE)i);

            if (NULL==pfnOrg[i])
                {
                pfnOrg[i]=(WNDPROC)GetWindowLong(pGizmo->hWnd
                    , GWL_WNDPROC);
                }

            SetWindowLong(pGizmo->hWnd, GWL_WNDPROC
                , (LONG)GenericSubProc);

            //If we're a combobox, subclass edit control
            if (GIZMOTYPE_COMBOBOX==iType)
                {
                hWndE=GetDlgItem(pGizmo->hWnd, ID_COMBOEDIT);
                SetProp(hWndE, SZTYPEPROP, (HANDLE)-1);

                if (NULL==pfnOrg[0])
                    {
                    pfnOrg[0]=(WNDPROC)GetWindowLong(pGizmo->hWnd
                        , GWL_WNDPROC);
                    }

                SetWindowLong(hWndE, GWL_WNDPROC
                    , (LONG)GenericSubProc);
                }
            }
        }


    //Finally, move all our neighbors to the right to accomodate us.
    GizmosExpand(pGizmo);

    *pfSuccess=TRUE;
    return pGizmo;
    }






/*
 * GizmoPFree
 *
 * Purpose:
 *  Reverses all initialization done by GizmoPAllocate, cleaning up
 *  any allocations including the application structure itself.
 *
 * Parameters:
 *  ppFirst         PPGIZMO providing the first gizmo in this list.
 *  pGizmo          PGIZMO to the structure
 *
 * Return Value:
 *  PGIZMO          NULL if successful, pGizmo if not, meaning we
 *                  couldn't free something.
 */

PGIZMO GizmoPFree(PPGIZMO ppFirst, PGIZMO pGizmo)
    {
    int     i;

    if (NULL==pGizmo)
        return NULL;

    //Move other gizmos to fill in this gap.
    GizmosCompact(pGizmo);

    //Unsubclass
    if (GIZMOTYPE_WINDOWS & pGizmo->iType
        && GIZMOTYPE_TEXT!=pGizmo->iType)
        {
        i=(int)GetProp(pGizmo->hWnd, SZTYPEPROP);
        RemoveProp(pGizmo->hWnd, SZTYPEPROP);

        if (GIZMOTYPE_COMBOBOX==pGizmo->iType)
            {
            HWND        hWndE;

            hWndE=GetDlgItem(pGizmo->hWnd, ID_COMBOEDIT);
            RemoveProp(hWndE, SZTYPEPROP);
            }

        SetWindowLong(pGizmo->hWnd, GWL_WNDPROC, (LONG)pfnOrg[i]);
        }

    //If this was a window gizmo, destroy the window.
    if (NULL!=pGizmo->hWnd && IsWindow(pGizmo->hWnd))
        DestroyWindow(pGizmo->hWnd);

    //Unlink ourselves.
    if (NULL!=pGizmo->pNext)
        pGizmo->pNext->pPrev=pGizmo->pPrev;

    if (NULL!=pGizmo->pPrev)
        pGizmo->pPrev->pNext=pGizmo->pNext;
    else
        *ppFirst=pGizmo->pNext;

    return (PGIZMO)LocalFree((HLOCAL)(UINT)(LONG)pGizmo);
    }






/*
 * GizmosExpand
 *
 * Purpose:
 *  Given a starting gizmo and a width, moves it and all gizmos to
 *  its right to the right by the width to make space for showing
 *  or creating a new gizmo.
 *
 * Parameters:
 *  pGizmo          PGIZMO specifying the gizmo that was inserted.
 *
 * Return Value:
 *  None
 */

void GizmosExpand(PGIZMO pGizmo)
    {
    int         cx;

    cx=(int)pGizmo->dx;

    /*
     * If we and the next control are buttons, use our width-1 to
     * expand so we overlap borders with our neighboring button.
     */

    if (NULL!=pGizmo->pNext)
        {
        if ((GIZMOTYPE_BUTTONS & pGizmo->pNext->iType)
            && (GIZMOTYPE_BUTTONS & pGizmo->iType))
            cx-=1;
        }

    //Walk the gizmo list moving them right by our width.
    pGizmo=pGizmo->pNext;

    while (NULL!=pGizmo)
        {
        pGizmo->x+=cx;

        //hWnd is NULL for buttons and separators.
        if (NULL!=pGizmo->hWnd)
            {
            SetWindowPos(pGizmo->hWnd, NULL, pGizmo->x, pGizmo->y

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久久久久久裸模| 青椒成人免费视频| 国产精品网站在线| 久久久99精品免费观看不卡| 久久一留热品黄| 国产亚洲美州欧州综合国| 26uuu亚洲| 国产日韩欧美电影| 国产精品免费av| 亚洲婷婷在线视频| 亚洲国产美国国产综合一区二区| 亚洲黄色在线视频| 五月婷婷久久丁香| 免费高清在线视频一区·| 奇米影视一区二区三区小说| 精品一区二区三区在线观看| 国产老女人精品毛片久久| 国产成人精品亚洲777人妖| av资源站一区| 在线观看网站黄不卡| 8v天堂国产在线一区二区| 欧美一级日韩一级| 久久综合色8888| 国产精品麻豆一区二区 | 亚洲成人av免费| 日本成人在线不卡视频| 国产一区二区三区四区五区美女 | 成人黄页毛片网站| 色哟哟一区二区在线观看| 欧美日韩亚洲另类| 久久影院午夜片一区| 国产ts人妖一区二区| 99久久国产综合色|国产精品| 欧美三级电影一区| 久久色视频免费观看| 亚洲精品视频在线看| 青青草伊人久久| 成人福利视频网站| 538在线一区二区精品国产| 久久综合九色综合欧美98| 亚洲人午夜精品天堂一二香蕉| 爽爽淫人综合网网站| 粉嫩蜜臀av国产精品网站| 欧美视频在线观看一区| 精品成人一区二区三区四区| 亚洲欧美怡红院| 久久国产尿小便嘘嘘尿| a4yy欧美一区二区三区| 日韩欧美一级二级| 亚洲视频免费观看| 麻豆视频一区二区| 色综合天天狠狠| 精品国产第一区二区三区观看体验| 亚洲精品你懂的| 国产真实乱子伦精品视频| 在线观看日韩电影| 国产女主播视频一区二区| 午夜国产精品一区| 99国产精品视频免费观看| 久久精品噜噜噜成人av农村| 91视频在线看| 久久这里只有精品6| 午夜精品久久久久久久久久久| 成人av电影在线| 久久影音资源网| 日韩国产高清在线| 色欧美乱欧美15图片| 久久久久久久久久久99999| 亚洲不卡av一区二区三区| www.欧美精品一二区| 久久综合一区二区| 免费看日韩精品| 欧美亚洲动漫另类| 国产精品欧美久久久久一区二区| 麻豆视频观看网址久久| 欧美唯美清纯偷拍| 日韩一区欧美一区| 丰满白嫩尤物一区二区| 日韩美女在线视频| 日本三级亚洲精品| 欧美日韩情趣电影| 亚洲午夜精品一区二区三区他趣| 成人av一区二区三区| 国产人久久人人人人爽| 久久精品久久99精品久久| 欧美日韩电影一区| 亚洲成av人片| 欧美中文字幕一二三区视频| 亚洲欧美日韩在线| 99这里只有精品| 国产精品久久久久一区二区三区共| 国产精品夜夜嗨| 欧美精品一区二区三区久久久| 青青草国产成人av片免费| 欧美精品少妇一区二区三区| 亚洲一区二区美女| 在线免费观看日本一区| 亚洲一区在线电影| 欧美性猛交xxxx乱大交退制版| 亚洲午夜在线观看视频在线| 欧美三级中文字幕在线观看| 亚洲国产美女搞黄色| 欧美精品日韩一区| 日本最新不卡在线| 精品免费国产二区三区| 国产真实乱子伦精品视频| 国产午夜精品久久| 成人性生交大片免费| 亚洲特黄一级片| 91国产福利在线| 天堂在线亚洲视频| 欧美一区二区三区婷婷月色 | 欧美午夜精品理论片a级按摩| 一区二区三区产品免费精品久久75| 欧洲国内综合视频| 午夜一区二区三区视频| 51精品秘密在线观看| 蜜桃精品视频在线| 久久精品日产第一区二区三区高清版 | 天天综合天天综合色| 日韩一区二区在线看| 国产麻豆视频精品| 亚洲国产电影在线观看| 亚洲同性gay激情无套| 欧美日韩精品免费| 韩国成人精品a∨在线观看| 欧美激情一区三区| 日本精品视频一区二区三区| 亚洲五码中文字幕| 精品久久久网站| av不卡免费电影| 日日摸夜夜添夜夜添国产精品| 日韩精品一区二区三区三区免费| 国产精品66部| 亚洲国产一区视频| 精品日韩在线一区| 91麻豆精品一区二区三区| 日本一不卡视频| 国产精品色呦呦| 欧美日韩高清在线播放| 国产成人av电影在线| 一区二区三区日韩精品| 日韩免费观看高清完整版| 91网站视频在线观看| 日韩在线a电影| 欧美高清在线视频| 在线电影院国产精品| 国产风韵犹存在线视精品| 亚洲高清在线视频| 日本一区二区免费在线观看视频| 欧美在线一二三| 国产精品亚洲视频| 视频一区二区国产| 国产精品美女视频| 欧美成人bangbros| 欧美午夜精品久久久久久孕妇| 韩国精品久久久| 亚洲6080在线| 亚洲欧洲无码一区二区三区| 欧美一区二区美女| 欧洲人成人精品| 成人在线综合网| 理论电影国产精品| 亚洲激情自拍视频| 久久久久99精品一区| 555www色欧美视频| 91福利精品第一导航| 国产高清不卡一区| 久久精品国产亚洲aⅴ| 亚洲大型综合色站| 亚洲欧美激情插| 国产精品午夜在线| 2021久久国产精品不只是精品| 在线播放日韩导航| 色综合天天视频在线观看| 成人久久视频在线观看| 狠狠色狠狠色综合| 婷婷开心激情综合| 一区二区欧美视频| 亚洲色图色小说| 国产精品天干天干在观线| 2023国产精华国产精品| 日韩欧美aaaaaa| 91精品国产综合久久精品app | 欧美剧在线免费观看网站| 色综合av在线| 91丨porny丨首页| 国产精品一区二区久久不卡| 开心九九激情九九欧美日韩精美视频电影 | 国产精品三级在线观看| 久久久久久久综合色一本| 2020国产精品| 久久一区二区三区四区| 精品国产一区二区三区四区四| 欧美一区二区黄色| 欧美一级欧美三级在线观看| 欧美福利一区二区| 欧美裸体bbwbbwbbw| 欧美日韩一区久久| 欧美精品日日鲁夜夜添|