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

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

?? document.cpp

?? 英文版的 想要的話可以下載了 為大家服務(wù)
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/*
 * DOCUMENT.CPP
 * Freeloader Chapter 11
 *
 * Implementation of the CFreeloaderDoc derivation of CDocument.
 * We create a default handler object and use it for drawing, data
 * caching, and serialization.
 *
 * Copyright (c)1993-1995 Microsoft Corporation, All Rights Reserved
 *
 * Kraig Brockschmidt, Microsoft
 * Internet  :  kraigb@microsoft.com
 * Compuserve:  >INTERNET:kraigb@microsoft.com
 */


#include "freeload.h"


/*
 * CFreeloaderDoc::CFreeloaderDoc
 * CFreeloaderDoc::~CFreeloaderDoc
 *
 * Constructor Parameters:
 *  hInst           HINSTANCE of the application.
 *  pFR             PCFrame of the frame object.
 *  pAdv            PCDocumentAdviseSink to notify on events
 */

CFreeloaderDoc::CFreeloaderDoc(HINSTANCE hInst, PCFrame pFR
    , PCDocumentAdviseSink pAdv)
    : CDocument(hInst, pFR, pAdv)
    {
    m_pIStorage=NULL;
    m_pIUnknown=NULL;
    m_dwConn=0;
    m_clsID=CLSID_NULL;
    return;
    }


CFreeloaderDoc::~CFreeloaderDoc(void)
    {
    ReleaseObject();
    ReleaseInterface(m_pIStorage);
    return;
    }




/*
 * CFreeloaderDoc::ReleaseObject
 *
 * Purpose:
 *  Centralizes cleanup code for the object and its cache.
 *
 * Parameters:
 *  None
 *
 * Return Value:
 *  None
 */

void CFreeloaderDoc::ReleaseObject(void)
    {
    LPOLECACHE      pIOleCache;
    HRESULT         hr;

    if (0!=m_dwConn)
        {
        hr=m_pIUnknown->QueryInterface(IID_IOleCache
            , (PPVOID)&pIOleCache);

        if (SUCCEEDED(hr))
            {
            pIOleCache->Uncache(m_dwConn);
            pIOleCache->Release();
            }
        }

    ReleaseInterface(m_pIUnknown);
    CoFreeUnusedLibraries();
    m_dwConn=0;
    return;
    }



/*
 * CFreeloaderDoc::FInit
 *
 * Purpose:
 *  Initializes an already created document window.  Here we
 *  only change the stringtable bounds.
 *
 * Parameters:
 *  pDI             PDOCUMENTINIT containing initialization
 *                  parameters.
 *
 * Return Value:
 *  BOOL            TRUE if the function succeeded, FALSE otherwise.
 */

BOOL CFreeloaderDoc::FInit(PDOCUMENTINIT pDI)
    {
    //Change the stringtable range to our customization.
    pDI->idsMin=IDS_DOCUMENTMIN;
    pDI->idsMax=IDS_DOCUMENTMAX;

    //Do default initialization
    return CDocument::Init(pDI);
    }





/*
 * CFreeloaderDoc::FMessageHook
 *
 * Purpose:
 *  Processes WM_PAINT for the document so we can draw the object.
 *
 * Parameters:
 *  <WndProc Parameters>
 *  pLRes           LRESULT * in which to store the return
 *                  value for the message.
 *
 * Return Value:
 *  BOOL            TRUE to prevent further processing,
 *                  FALSE otherwise.
 */

BOOL CFreeloaderDoc::FMessageHook(HWND hWnd, UINT iMsg
    , WPARAM wParam, LPARAM lParam, LRESULT *pLRes)
    {
    PAINTSTRUCT     ps;
    HDC             hDC;
    RECT            rc;
    RECTL           rcl;
    LPVIEWOBJECT2   pIViewObject2;
    HRESULT         hr;

    if (WM_PAINT!=iMsg)
        return FALSE;

    hDC=BeginPaint(hWnd, &ps);
    GetClientRect(hWnd, &rc);

    //Draw the object with IViewObject2::Draw, allowing ESC
    if (NULL!=m_pIUnknown)
        {
        hr=m_pIUnknown->QueryInterface(IID_IViewObject2
            , (PPVOID)&pIViewObject2);

        if (SUCCEEDED(hr))
            {
            //Put "Hit Esc to stop" in the status line
            m_pFR->StatusLine()->MessageSet(PSZ(IDS_HITESCTOSTOP));

            RECTLFROMRECT(rcl, rc);
            pIViewObject2->Draw(DVASPECT_CONTENT, -1, NULL, NULL
                , 0, hDC, &rcl, NULL, ContinuePaint, 0);
            pIViewObject2->Release();

            m_pFR->StatusLine()->MessageDisplay(ID_MESSAGEREADY);
            }
        }

    EndPaint(hWnd, &ps);
    return FALSE;
    }



/*
 * ContinuePaint
 *
 * Purpose:
 *  Callback function for IViewObject2::Draw that allows us to
 *  abort a long repaint.  This implementation watches the
 *  Esc key through GetAsyncKeyState.
 *
 * Parameters:
 *  dwContinue      DWORD custom data passed to IViewObject::Draw
 *                  which in our case holds the document pointer.
 *
 * Return Value:
 *  BOOL            TRUE to continue painting, FALSE to stop it.
 */

BOOL CALLBACK ContinuePaint(DWORD dwContinue)
    {
    return !(GetAsyncKeyState(VK_ESCAPE) < 0);
    }





/*
 * CFreeloaderDoc::Load
 *
 * Purpose:
 *  Loads a given document without any user interface overwriting
 *  the previous contents of the window.
 *
 * Parameters:
 *  fChangeFile     BOOL indicating if we're to update the window
 *                  title and the filename from using this file.
 *  pszFile         LPTSTR to the filename to load, NULL if the file
 *                  is new and untitled.
 *
 * Return Value:
 *  UINT            An error value from DOCERR_...
 */

UINT CFreeloaderDoc::Load(BOOL fChangeFile, LPTSTR pszFile)
    {
    HRESULT             hr;
    LPSTORAGE           pIStorage;
    LPUNKNOWN           pIUnknown;
    LPPERSISTSTORAGE    pIPersistStorage;
    DWORD               dwMode=STGM_TRANSACTED | STGM_READWRITE
                            | STGM_SHARE_EXCLUSIVE;
    CLSID               clsID;

    if (NULL==pszFile)
        {
        //Create a new temp file.
        hr=StgCreateDocfile(NULL, dwMode | STGM_CREATE
            | STGM_DELETEONRELEASE, 0, &pIStorage);

        if (FAILED(hr))
            return DOCERR_COULDNOTOPEN;

        m_pIStorage=pIStorage;

        FDirtySet(FALSE);
        Rename(NULL);
        return DOCERR_NONE;
        }

    //Attempt to open the storage.
    hr=StgOpenStorage(pszFile, NULL, dwMode, NULL, 0, &pIStorage);

    if (FAILED(hr))
        return DOCERR_COULDNOTOPEN;

    /*
     * When we previously called IPersistStorage::Save, we saved
     * the class of this object type with WriteClassStg.  Now
     * we read that CLSID, create a data cache for it, then
     * have it reload its data into the cache through
     * IPersistStorage::Load.
     */

    hr=ReadClassStg(pIStorage, &clsID);

    hr=CreateDataCache(NULL, clsID, IID_IUnknown
        , (PPVOID)&pIUnknown);

    if (FAILED(hr))
        {
        pIStorage->Release();
        return DOCERR_READFAILURE;
        }

    //Get IPersistStorage for the data we hold.
    pIUnknown->QueryInterface(IID_IPersistStorage
        , (PPVOID)&pIPersistStorage);

    //Load might fail because the object is already open...
    hr=pIPersistStorage->Load(pIStorage);
    pIPersistStorage->Release();

    if (FAILED(hr))
        {
        pIUnknown->Release();
        pIStorage->Release();
        return DOCERR_READFAILURE;
        }

    m_pIStorage=pIStorage;
    m_pIUnknown=pIUnknown;

    Rename(pszFile);
    SizeToGraphic(FALSE);
    FDirtySet(FALSE);
    return DOCERR_NONE;
    }







/*
 * CFreeloaderDoc::Save
 *
 * Purpose:
 *  Writes the file to a known filename, requiring that the user
 *  has previously used FileOpen or FileSaveAs in order to have
 *  a filename.
 *
 * Parameters:
 *  uType           UINT indicating the type of file the user
 *                  requested to save in the File Save As dialog.
 *  pszFile         LPTSTR under which to save.  If NULL, use the
 *                  current name.
 *
 * Return Value:
 *  UINT            An error value from DOCERR_...
 */

UINT CFreeloaderDoc::Save(UINT uType, LPTSTR pszFile)
    {
    HRESULT             hr;
    LPSTORAGE           pIStorage;
    LPPERSISTSTORAGE    pIPersistStorage;
    CLSID               clsID;

    //If we have no data object, there's nothing to save.
    if (NULL==m_pIUnknown)
        return DOCERR_WRITEFAILURE;

    //Get IPersistStorage for the data we hold.
    hr=m_pIUnknown->QueryInterface(IID_IPersistStorage
        , (PPVOID)&pIPersistStorage);

    if (FAILED(hr))
        return DOCERR_WRITEFAILURE;

    //Save or Save As with the same file is just a commit.
    if (NULL==pszFile || (NULL!=pszFile
        && 0==lstrcmpi(pszFile, m_szFile)))
        {
        pIPersistStorage->Save(m_pIStorage, TRUE);
        m_pIStorage->Commit(STGC_ONLYIFCURRENT);

        pIPersistStorage->SaveCompleted(NULL);
        pIPersistStorage->Release();

        FDirtySet(FALSE);
        return DOCERR_NONE;
        }

    /*
     * When we're given a name, open the storage, creating it new
     * ifit does not exist or overwriting the old one.  Then CopyTo
     * from the current to the new, Commit the new, then Release
     * the old.
     */

    hr=StgCreateDocfile(pszFile, STGM_TRANSACTED | STGM_READWRITE
        | STGM_CREATE | STGM_SHARE_EXCLUSIVE, 0, &pIStorage);

    if (FAILED(hr))
        return DOCERR_COULDNOTOPEN;

    //Insure the image is up to date, then tell it we're changing
    pIPersistStorage->Save(m_pIStorage, TRUE);
    pIPersistStorage->HandsOffStorage();

    //Save the class, bitmap or metafile
    if (FAILED(pIPersistStorage->GetClassID(&clsID)))
        clsID=m_clsID;

    hr=WriteClassStg(m_pIStorage, clsID);

    hr=m_pIStorage->CopyTo(NULL, NULL, NULL, pIStorage);

    if (FAILED(hr))
        {
        pIPersistStorage->SaveCompleted(m_pIStorage);
        pIPersistStorage->Release();
        pIStorage->Release();
        return DOCERR_WRITEFAILURE;
        }

    pIStorage->Commit(STGC_ONLYIFCURRENT);

    /*

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
秋霞成人午夜伦在线观看| 欧美视频精品在线| 国产亚洲欧美日韩日本| 国产成人在线看| 中文子幕无线码一区tr| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 678五月天丁香亚洲综合网| 亚洲高清久久久| 91麻豆精品国产自产在线| 麻豆国产精品777777在线| 久久在线观看免费| 成人av网站大全| 婷婷中文字幕综合| 久久久午夜精品理论片中文字幕| 国产91丝袜在线18| 亚洲国产一区二区三区| 久久久久久久久久久99999| 91麻豆免费视频| 精品一区二区三区av| 中文字幕在线不卡国产视频| 欧美中文一区二区三区| 国产精品123| 久久综合九色综合97婷婷| 亚洲成人免费观看| 777精品伊人久久久久大香线蕉| 亚洲欧美另类图片小说| 美日韩黄色大片| 欧美成va人片在线观看| 日韩精品电影在线观看| 欧美一区二区三区白人| 色播五月激情综合网| 欧美高清在线视频| 久久久久久久久蜜桃| 久久婷婷国产综合国色天香| 国产成人免费在线观看| 日韩在线一二三区| 亚洲三级久久久| 日韩视频免费观看高清完整版| 成人av网站在线观看| 成人黄色软件下载| 理论片日本一区| 美腿丝袜亚洲三区| 免费日本视频一区| 毛片不卡一区二区| 国产在线日韩欧美| 国产揄拍国内精品对白| 久久99精品国产麻豆婷婷| 精品一区二区三区久久久| 日本欧美一区二区三区乱码| 欧美午夜电影在线播放| 欧美日本乱大交xxxxx| 久久久久久日产精品| 中文字幕精品一区| 亚洲卡通欧美制服中文| 亚洲成av人影院| 久久精品久久综合| 国产精品一级黄| 91视频国产资源| 日韩你懂的电影在线观看| 日韩区在线观看| 精品美女一区二区三区| 国产精品天美传媒沈樵| 亚洲一区二区三区视频在线| 日韩av在线播放中文字幕| 寂寞少妇一区二区三区| 亚洲精品国产第一综合99久久| 日韩天堂在线观看| 欧美久久免费观看| 一本久道久久综合中文字幕| 免费成人性网站| 久久99精品久久久久| 精品一区二区三区免费播放| 国产成人午夜精品影院观看视频 | 国产成人8x视频一区二区| 99久久免费视频.com| 欧美老年两性高潮| 中文字幕亚洲不卡| 热久久久久久久| 久久久久久麻豆| 蜜桃av噜噜一区| 欧美视频三区在线播放| 亚洲欧洲性图库| 国产成人99久久亚洲综合精品| 日韩三级视频在线看| 亚洲老妇xxxxxx| 99精品热视频| 国产欧美视频一区二区| 久久爱www久久做| 欧美一区午夜视频在线观看| 亚洲综合另类小说| 99re亚洲国产精品| 一区二区三区不卡视频| 成人精品视频一区二区三区 | 蜜臀av性久久久久蜜臀av麻豆| 91麻豆精品一区二区三区| 国产精品九色蝌蚪自拍| 国产传媒久久文化传媒| 久久久天堂av| 91原创在线视频| 天涯成人国产亚洲精品一区av| 欧美三级三级三级| 蜜臂av日日欢夜夜爽一区| 久久亚洲二区三区| 成人一区在线看| 91精品欧美综合在线观看最新| 精品久久久影院| 婷婷国产在线综合| 91免费国产在线| 中文字幕不卡的av| 蜜臀久久99精品久久久久宅男| 91年精品国产| 国产午夜三级一区二区三| 日韩专区在线视频| 欧美乱妇15p| 日韩av高清在线观看| 欧美色国产精品| 视频精品一区二区| 精品电影一区二区| 久久av中文字幕片| 欧美一区二区视频在线观看2022| 亚洲三级久久久| 欧美亚洲日本国产| 亚洲视频图片小说| 99久久婷婷国产综合精品| 国产精品久久久久久久久动漫| 国产成人欧美日韩在线电影| 精品国产一区二区三区不卡| 国精产品一区一区三区mba桃花| 亚洲精品一区二区三区精华液| 久久不见久久见中文字幕免费| 9191成人精品久久| 国内久久精品视频| 亚洲欧洲av在线| 91福利在线导航| 另类小说色综合网站| 久久久久久一二三区| 在线观看欧美日本| 捆绑调教一区二区三区| 国产精品剧情在线亚洲| 欧美日韩一区不卡| 国产一区二区电影| 亚洲永久免费视频| 国产色综合一区| 91精品国产综合久久国产大片| 丁香婷婷综合激情五月色| 亚洲成人三级小说| 亚洲人成网站精品片在线观看| 精品免费国产二区三区| 91免费版pro下载短视频| 激情综合网av| 亚洲福利一区二区| 亚洲欧洲精品一区二区三区| 精品国产三级a在线观看| 91在线视频免费观看| 国产成人免费在线| 精品一区二区久久| 免费在线一区观看| 视频在线观看国产精品| 亚洲一区二区三区四区在线免费观看 | 7777精品伊人久久久大香线蕉的 | 日韩中文字幕一区二区三区| 国产精品视频第一区| 久久久久久麻豆| 久久精品视频在线免费观看| 日韩精品在线一区二区| 日韩亚洲欧美高清| 欧美一卡二卡在线观看| 欧美videos大乳护士334| 欧美精品 国产精品| 欧美在线一区二区三区| 欧美在线观看视频一区二区| 精品视频一区二区不卡| 3751色影院一区二区三区| 欧美色精品天天在线观看视频| 国产日本欧美一区二区| 日韩国产一二三区| 色婷婷久久久久swag精品| 久久天堂av综合合色蜜桃网| 五月天久久比比资源色| 日本精品裸体写真集在线观看| 国产精品女上位| 久久国产精品99久久久久久老狼| 欧美在线一区二区| 亚洲国产aⅴ成人精品无吗| 91色综合久久久久婷婷| 国产亚洲精品aa| 久久99精品一区二区三区三区| 欧美日韩一区视频| 亚洲成人久久影院| 色婷婷av一区| 精品免费99久久| 日韩高清一区在线| av中文字幕亚洲| 日韩一区二区视频在线观看| 国产精品视频看| 精品系列免费在线观看| 欧美久久久久免费| 欧美激情资源网| 国产精品资源在线看| 91 com成人网|