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

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

?? pages.cpp

?? 英文版的 想要的話可以下載了 為大家服務
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/*
 * PAGES.CPP
 * Patron Chapter 20
 *
 * Implementation of the CPages class.  See PAGEWIN.CPP and PRINT.CPP
 * for additional member functions.
 *
 * Copyright (c)1993-1995 Microsoft Corporation, All Rights Reserved
 *
 * Kraig Brockschmidt, Microsoft
 * Internet  :  kraigb@microsoft.com
 * Compuserve:  >INTERNET:kraigb@microsoft.com
 */


#include "patron.h"


/*
 * CPages:CPages
 * CPages::~CPages
 *
 * Constructor Parameters:
 *  hInst           HINSTANCE of the application we're in.
 *  cf              UINT application clipboard format.
 */

CPages::CPages(HINSTANCE hInst, UINT cf)
    : CWindow(hInst)
    {
    m_pPageCur=NULL;
    m_iPageCur=NOVALUE;  //Pages are 0 indexed, this is one before
    m_cPages=0;
    m_hWndPageList=NULL;
    m_hFont=NULL;
    m_fSystemFont=FALSE;

    //Initialize to 8.5*11 inch with .25 inch margins as a default.
    m_cx=(LOMETRIC_PER_INCH*17)/2;
    m_cy=LOMETRIC_PER_INCH*11;

    m_xMarginLeft=LOMETRIC_PER_INCH/4;
    m_xMarginRight=LOMETRIC_PER_INCH/4;
    m_yMarginTop=LOMETRIC_PER_INCH/4;
    m_yMarginBottom=LOMETRIC_PER_INCH/4;

    m_xPos=0L;
    m_yPos=0L;

    m_dwIDNext=0;
    m_pIStorage=NULL;

    m_fDirty=FALSE;
    m_cf=cf;

    m_fDragSource=FALSE;
    m_fMoveInPage=FALSE;
    //CHAPTER20MOD
    m_fLinkAllowed=FALSE;
    //End CHAPTER20MOD

    m_fDragRectShown=FALSE;

    m_uScrollInset=GetProfileInt(TEXT("windows")
        , TEXT("DragScrollInset"), DD_DEFSCROLLINSET);

    m_uScrollDelay=GetProfileInt(TEXT("windows")
        , TEXT("DragScrollDelay"), DD_DEFSCROLLDELAY);

    m_uHScrollCode=0;
    m_uVScrollCode=0;

    //CHAPTER20MOD
    m_fShowTypes=FALSE;
    //End CHAPTER20MOD

    return;
    }


CPages::~CPages(void)
    {
    //Ensure memory cleaned up in list; do final IStorage::Release
    StorageSet(NULL, FALSE, FALSE);

    if (NULL!=m_hFont && !m_fSystemFont)
        DeleteObject(m_hFont);

    if (NULL!=m_hWndPageList)
        DestroyWindow(m_hWndPageList);

    //m_hWnd destroyed with the document.
    return;
    }



/*
 * CPages::FIsDirty
 *
 * Purpose:
 *  Tells the caller (document) if anything's happened to dirty us.
 *
 * Parameters:
 *  None
 *
 * Return Value:
 *  None
 */

BOOL CPages::FIsDirty(void)
    {
    return m_fDirty;
    }



/*
 * CPages::Init
 *
 * Purpose:
 *  Instantiates a pages window within a given parent.  The
 *  parent may be a main application window, could be an MDI child
 *  window. We really do not care.
 *
 * Parameters:
 *  hWndParent      HWND of the parent of this window
 *  pRect           LPRECT that this window should occupy
 *  dwStyle         DWORD containing the window's style flags.
 *                  Should contain WS_CHILD | WS_VISIBLE in
 *                  typical circumstances.
 *  uID             UINT ID to associate with this window
 *  pv              LPVOID unused for now.
 *
 * Return Value:
 *  BOOL            TRUE if the function succeeded, FALSE otherwise.
 */

BOOL CPages::Init(HWND hWndParent, LPRECT pRect, DWORD dwStyle
    , UINT uID, LPVOID pv)
    {
    int     cy;

    m_hWnd=CreateWindowEx(WS_EX_NOPARENTNOTIFY, SZCLASSPAGES
        , SZCLASSPAGES, dwStyle, pRect->left, pRect->top
        , pRect->right-pRect->left, pRect->bottom-pRect->top
        , hWndParent, (HMENU)uID, m_hInst, this);

    if (NULL==m_hWnd)
        return FALSE;

    /*
     * Create the hidden listbox we'll use to track pages.  We give
     * it the owner-draw style so we can just store pointers in it.
     */
    m_hWndPageList=CreateWindow(TEXT("listbox"), TEXT("Page List")
        , WS_POPUP | LBS_OWNERDRAWFIXED, 0, 0, 100, 100
        , HWND_DESKTOP, NULL, m_hInst, NULL);

    if (NULL==m_hWndPageList)
        return FALSE;

    //Create a 14 point Arial font, or use the system variable font.
    cy=MulDiv(-14, LOMETRIC_PER_INCH, 72);
    m_hFont=CreateFont(cy, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE
        , ANSI_CHARSET, OUT_TT_PRECIS, CLIP_TT_ALWAYS, PROOF_QUALITY
        , VARIABLE_PITCH | FF_SWISS, TEXT("Arial"));

    if (NULL==m_hFont)
        {
        m_hFont=(HFONT)GetStockObject(ANSI_VAR_FONT);
        m_fSystemFont=TRUE;
        }

    return TRUE;
    }






/*
 * CPages::StorageSet
 *
 * Purpose:
 *  Provides the document's IStorage to the pages for its own use.
 *  If this is a new storage, we initalize it with streams that we
 *  want to always exists.  If this is an open, then we create
 *  our page list from the PageList string we wrote before.
 *
 * Parameters:
 *  pIStorage       LPSTORAGE to the new or opened storage.  If
 *                  NULL, we just clean up and exit.
 *  fChange         BOOL indicating is this was a Save As operation,
 *                  meaning that we have the structure already and
 *                  just need to change the value of m_pIStorage.
 *  fInitNew        BOOL indicating if this is a new storage or one
 *                  opened from a previous save.
 *
 * Return Value:
 *  BOOL            TRUE if successful, FALSE otherwise.
 */

BOOL CPages::StorageSet(LPSTORAGE pIStorage, BOOL fChange
    , BOOL fInitNew)
    {
    DWORD           dwMode=STGM_DIRECT | STGM_READWRITE
                        | STGM_SHARE_EXCLUSIVE;
    HRESULT         hr;
    PCPage          pPage;
    BOOL            fRet=FALSE;
    ULONG           cbRead;
    PAGELIST        pgList;
    LPSTREAM        pIStream;
    LPMALLOC        pIMalloc;
    LPDWORD         pdwID;
    UINT            i;

    //If we're changing saved roots, simply open current page again
    if (fChange)
        {
        if (NULL==pIStorage)
            return FALSE;

        m_pIStorage->Release();
        m_pIStorage=pIStorage;
        m_pIStorage->AddRef();

        PageGet(m_iPageCur, &m_pPageCur, TRUE);
        m_fDirty=FALSE;
        return TRUE;
        }

    if (NULL!=m_hWndPageList)
        {
        //On new or open, clean out whatever it is we have.
        for (i=0; i < m_cPages; i++)
            {
            if (PageGet(i, &pPage, FALSE))
                delete pPage;
            }

        SendMessage(m_hWndPageList, LB_RESETCONTENT, 0, 0L);
        }

    if (NULL!=m_pIStorage)
        m_pIStorage->Release();

    m_pIStorage=NULL;

    //If we're just cleaning up, then we're done.
    if (NULL==pIStorage)
        return TRUE;

    m_pIStorage=pIStorage;
    m_pIStorage->AddRef();

    //If this is a new storage, create the streams we require
    if (fInitNew)
        {
        //Page list header.
        hr=m_pIStorage->CreateStream(SZSTREAMPAGELIST, dwMode
            | STGM_CREATE, 0, 0, &pIStream);

        if (FAILED(hr))
            return FALSE;

        pIStream->Release();

        //Device Configuration
        hr=m_pIStorage->CreateStream(SZSTREAMDEVICECONFIG, dwMode
            | STGM_CREATE, 0, 0, &pIStream);

        if (FAILED(hr))
            return FALSE;

        pIStream->Release();
        return TRUE;
        }


    /*
     * We're opening an existing file:
     *  1)  Configure for the device we're on
     *  2)  Read the Page List and create page entries for each.
     */

    ConfigureForDevice();

    //Read the page list.
    hr=m_pIStorage->OpenStream(SZSTREAMPAGELIST, NULL, dwMode, 0
        , &pIStream);

    if (FAILED(hr))
        return FALSE;

    if (SUCCEEDED(CoGetMalloc(MEMCTX_TASK, &pIMalloc)))
        {
        pIStream->Read(&pgList, sizeof(PAGELIST), &cbRead);
        m_cPages  =(UINT)pgList.cPages;
        m_iPageCur=(UINT)pgList.iPageCur;
        m_dwIDNext=pgList.dwIDNext;

        fRet=TRUE;
        cbRead=pgList.cPages*sizeof(DWORD);

        if (0!=cbRead)
            {
            pdwID=(LPDWORD)pIMalloc->Alloc(cbRead);

            if (NULL!=pdwID)
                {
                pIStream->Read(pdwID, cbRead, &cbRead);

                for (i=0; i < m_cPages; i++)
                    fRet &=PageAdd(NOVALUE, *(pdwID+i), FALSE);

                pIMalloc->Free(pdwID);
                }
            }

        pIMalloc->Release();
        }

    pIStream->Release();

    if (!fRet)
        return FALSE;

    PageGet(m_iPageCur, &m_pPageCur, TRUE);
    m_fDirty=FALSE;

    InvalidateRect(m_hWnd, NULL, FALSE);
    UpdateWindow(m_hWnd);

    return TRUE;
    }





/*
 * CPages::StorageUpdate
 *
 * Purpose:
 *  Insures that all pages are committed before a root save.
 *
 * Parameters:
 *  fCloseAll       BOOL directing us to close all open storages
 *                  and streams.
 *
 * Return Value:
 *  BOOL            TRUE if successful, FALSE otherwise.
 */

BOOL CPages::StorageUpdate(BOOL fCloseAll)
    {
    PCPage          pPage;
    LPSTREAM        pIStream;
    LPMALLOC        pIMalloc;
    LPDWORD         pdwID;
    ULONG           cb;
    HRESULT         hr;
    PAGELIST        pgList;
    BOOL            fRet=FALSE;
    UINT            i;

    //We only need to close the current page--nothing else is open.
    if (NULL!=m_pPageCur)
        {
        m_pPageCur->Update();

        if (fCloseAll)
            m_pPageCur->Close(FALSE);
        }

    //We don't hold anything else open, so write the page list.
    hr=m_pIStorage->OpenStream(SZSTREAMPAGELIST, NULL, STGM_DIRECT
        | STGM_READWRITE | STGM_SHARE_EXCLUSIVE, 0, &pIStream);

    if (FAILED(hr))
        return FALSE;

    if (SUCCEEDED(CoGetMalloc(MEMCTX_TASK, &pIMalloc)))
        {
        pgList.cPages=m_cPages;
        pgList.iPageCur=m_iPageCur;
        pgList.dwIDNext=m_dwIDNext;

        pIStream->Write(&pgList, sizeof(PAGELIST), &cb);

        cb=m_cPages*sizeof(DWORD);
        pdwID=(LPDWORD)pIMalloc->Alloc(cb);

        if (NULL!=pdwID)
            {
            for (i=0; i < m_cPages; i++)
                {
                PageGet(i, &pPage, FALSE);
                *(pdwID+i)=pPage->GetID();
                }

            pIStream->Write(pdwID, cb, &cb);
            pIMalloc->Free(pdwID);
            fRet=TRUE;
            }
        pIMalloc->Release();
        }

    pIStream->Release();

    //Clean up the dirty flag when we do an update.
    m_fDirty=!fRet;
    return fRet;
    }







/*
 * CPages::RectGet
 *
 * Purpose:
 *  Returns the rectangle of the Pages window in parent coordinates.
 *
 * Parameters:
 *  pRect           LPRECT in which to return the rectangle.
 *
 * Return Value:
 *  None
 */

void CPages::RectGet(LPRECT pRect)
    {
    RECT        rc;
    POINT       pt;

    //Retrieve the size of our rectangle in parent coordinates.
    GetWindowRect(m_hWnd, &rc);
    SETPOINT(pt, rc.left, rc.top);
    ScreenToClient(GetParent(m_hWnd), &pt);

    SetRect(pRect, pt.x, pt.y, pt.x+(rc.right-rc.left)
        , pt.y+(rc.bottom-rc.top));

    return;
    }






/*
 * CPages::RectSet
 *
 * Purpose:
 *  Sets a new rectangle for the Pages window which sizes to fit.
 *  Coordinates are given in parent terms.
 *
 * Parameters:
 *  pRect           LPRECT containing the new rectangle.
 *  fNotify         BOOL indicating if we're to notify anyone of
 *                  the change.
 *
 * Return Value:
 *  None
 */

void CPages::RectSet(LPRECT pRect, BOOL fNotify)
    {
    UINT        cx, cy;

    if (NULL==pRect)
        return;

    cx=pRect->right-pRect->left;
    cy=pRect->bottom-pRect->top;

    SetWindowPos(m_hWnd, NULL, pRect->left, pRect->top
        , (UINT)cx, (UINT)cy, SWP_NOZORDER);

    UpdateScrollRanges();
    return;
    }




/*
 * CPages::SizeGet
 *
 * Purpose:
 *  Retrieves the size of the pages window in parent coordinates.
 *
 * Parameters:
 *  pRect           LPRECT in which to return the size.  The right
 *                  and bottom fields will contain the dimensions.
 *
 * Return Value:
 *  None
 */

void CPages::SizeGet(LPRECT pRect)
    {
    RectGet(pRect);
    return;
    }







/*
 * CPages::SizeSet
 *
 * Purpose:
 *  Sets a new size in parent coordinates for the Pages window.
 *
 * Parameters:
 *  pRect           LPRECT containing the new rectangle.
 *  fNotify         BOOL indicating if we're to notify anyone of
 *                  the change.
 *
 * Return Value:
 *  None
 */

void CPages::SizeSet(LPRECT pRect, BOOL fNotify)
    {
    UINT        cx, cy;

    if (NULL==pRect)
        return;

    cx=pRect->right-pRect->left;
    cy=pRect->bottom-pRect->top;

    SetWindowPos(m_hWnd, NULL, 0, 0, (UINT)cx, (UINT)cy
        , SWP_NOMOVE | SWP_NOZORDER);

    UpdateScrollRanges();
    return;
    }






/*
 * CPages::ActivePage
 *
 * Purpose:
 *  Returns a CPage pointer to the current page.
 *
 * Parameters:
 *  None
 *
 * Return Value:
 *  PCPage          Pointer to the current page.
 */

PCPage CPages::ActivePage(void)
    {
    PCPage      pPage;
    BOOL        fRet;

    fRet=PageGet(m_iPageCur, &pPage, FALSE);
    return fRet ? pPage : NULL;
    }





/*
 * CPages::PageInsert
 *
 * Purpose:
 *  Creates a new page immediately after the current page.  If
 *  there are no pages then this creates page 1.
 *
 * Parameters:
 *  uReserved       UINT unused
 *
 * Return Value:
 *  UINT            Index of the new page, 0 on failure.
 */

UINT CPages::PageInsert(UINT uReserved)
    {
    if (0!=m_cPages && NULL!=m_pPageCur)
        {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
丝袜a∨在线一区二区三区不卡| 91国在线观看| 亚洲成人av电影| 亚洲色图制服诱惑| 国产精品国产三级国产有无不卡| 久久精品视频在线看| 精品少妇一区二区三区在线播放 | 中文字幕一区二区三区色视频| 久久亚洲捆绑美女| 久久久www成人免费无遮挡大片| 欧美mv日韩mv国产网站app| 精品久久久久久久久久久久包黑料| 日韩视频免费观看高清在线视频| 精品乱码亚洲一区二区不卡| 欧美mv和日韩mv的网站| 国产视频在线观看一区二区三区 | 欧美亚洲综合另类| 欧美日韩亚洲综合在线| 欧美久久婷婷综合色| 欧美成人a视频| 国产精品久久久久影院色老大| 亚洲三级在线观看| 日韩av中文在线观看| 国产麻豆精品在线| 91色视频在线| 日韩一级黄色大片| 中文字幕不卡在线播放| 亚洲国产你懂的| 狠狠色综合日日| 99久久久精品| 91精品国产91久久久久久最新毛片| 精品国产在天天线2019| 日韩码欧中文字| 日本在线观看不卡视频| 国产成人8x视频一区二区| 欧美探花视频资源| 久久久久综合网| 丝袜美腿亚洲一区二区图片| 国产成人精品aa毛片| 欧美日韩国产综合一区二区| 久久精品一区蜜桃臀影院| 伊人婷婷欧美激情| 国产精品综合二区| 欧美日韩大陆在线| 亚洲日本在线a| 韩国女主播成人在线| 欧美日韩国产综合一区二区| 国产日韩一级二级三级| 日本不卡免费在线视频| 色综合中文综合网| 韩国v欧美v日本v亚洲v| 一本色道亚洲精品aⅴ| 久久蜜臀中文字幕| 午夜精品福利在线| 97久久精品人人做人人爽| 精品国产凹凸成av人网站| 亚洲va国产天堂va久久en| 波多野结衣在线一区| 国产亚洲成av人在线观看导航| 视频一区免费在线观看| 在线观看一区二区视频| 亚洲欧美日韩国产一区二区三区 | 国产高清不卡一区| 欧美一区二区视频在线观看2022 | 欧美精品色综合| 一区二区三区四区亚洲| 99天天综合性| 国产女人18水真多18精品一级做| 精品亚洲免费视频| 欧美一区2区视频在线观看| 亚洲高清不卡在线观看| 欧美性淫爽ww久久久久无| 日韩毛片高清在线播放| 色哟哟日韩精品| 亚洲一区二区精品久久av| 91九色02白丝porn| 亚洲一区二区四区蜜桃| 欧美在线免费观看亚洲| 天天综合天天做天天综合| 欧美亚洲一区二区在线| 洋洋成人永久网站入口| 欧美日韩一区二区欧美激情 | 欧美日韩一级视频| 亚洲成人动漫在线观看| 欧美日本一区二区| 美腿丝袜在线亚洲一区| 久久免费精品国产久精品久久久久| 国产九色sp调教91| 中文av字幕一区| 91麻豆国产福利精品| 亚洲大片精品永久免费| 欧美一区二区三区思思人| 国产精品911| 一区二区三区不卡在线观看| 在线播放欧美女士性生活| 国产一区二区三区四区五区入口 | 97久久人人超碰| 一区二区欧美精品| 日韩精品中文字幕一区| 国产成人午夜99999| 一区二区三区精品在线观看| 91精品欧美一区二区三区综合在 | 国产精品乱码久久久久久| 91麻豆免费观看| 亚洲超丰满肉感bbw| 精品美女一区二区三区| 大胆亚洲人体视频| 五月天婷婷综合| 久久久亚洲精品石原莉奈| 99精品久久免费看蜜臀剧情介绍| 亚洲成av人片一区二区三区| 久久久www成人免费毛片麻豆 | 欧美高清视频www夜色资源网| 久久激情五月激情| 日韩理论片网站| 日韩欧美一卡二卡| 91丨porny丨在线| 美日韩一区二区三区| 最新成人av在线| 精品成人一区二区三区四区| 欧美亚洲综合网| 国产91对白在线观看九色| 肉色丝袜一区二区| 亚洲少妇最新在线视频| 国产网站一区二区| 欧美一级欧美三级| 在线观看亚洲精品| 成人久久久精品乱码一区二区三区| 偷拍与自拍一区| 亚洲伦理在线免费看| 日本一区二区三区国色天香| 在线播放中文字幕一区| 欧日韩精品视频| 97超碰欧美中文字幕| 精品一区二区国语对白| 日韩电影在线免费观看| 亚洲综合男人的天堂| 亚洲色图欧洲色图婷婷| 日本一区二区免费在线观看视频 | 福利一区二区在线| 国产美女av一区二区三区| 午夜精品久久久久久不卡8050| 亚洲男帅同性gay1069| 国产亚洲欧美日韩日本| 精品国产乱码久久久久久久| 日韩一区二区精品| 日韩精品中午字幕| 精品日韩欧美在线| 精品日韩欧美在线| 2022国产精品视频| 国产午夜精品一区二区| 国产亚洲精品bt天堂精选| 国产日韩欧美一区二区三区乱码| 精品美女被调教视频大全网站| 日韩欧美成人激情| 久久欧美中文字幕| 26uuu另类欧美亚洲曰本| 国产午夜精品久久久久久久| 国产亚洲短视频| 亚洲婷婷综合色高清在线| 中文字幕一区三区| 亚洲一区二区三区三| 日韩高清不卡一区二区三区| 美国十次了思思久久精品导航| 免费精品99久久国产综合精品| 久久激情五月婷婷| 成人精品视频一区| 欧美午夜视频网站| 欧美一区二区三区四区久久| 久久午夜国产精品| 国产精品久久久久久久久久免费看 | 一本色道久久综合亚洲91| 色综合久久66| 91麻豆精品国产自产在线| 精品美女一区二区| 亚洲人成亚洲人成在线观看图片| 亚洲国产一区二区a毛片| 久久国产综合精品| www.日韩在线| 91精品国产欧美一区二区| 国产日韩影视精品| 亚洲国产成人porn| 国产成人精品一区二区三区网站观看| 成人网在线免费视频| 欧美日韩视频在线一区二区 | 成人va在线观看| 91精选在线观看| 国产日韩欧美制服另类| 亚洲成人av福利| 成人免费不卡视频| 7777精品伊人久久久大香线蕉| 国产三级精品三级在线专区| 亚洲午夜三级在线| 99久久亚洲一区二区三区青草| 欧美日韩精品一二三区| 亚洲欧美在线高清| 国产精品综合av一区二区国产馆| 色嗨嗨av一区二区三区| 亚洲国产成人在线| 蜜臀久久99精品久久久画质超高清|