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

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

?? document.cpp

?? 英文版的 想要的話可以下載了 為大家服務
?? 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一区二区三区免费野_久草精品视频
亚洲永久免费视频| 91网上在线视频| 日韩国产成人精品| 国产精品网站在线观看| 国产精品一区在线观看乱码| 中文字幕欧美国产| 色综合久久中文综合久久牛| 亚洲一区二区三区四区在线免费观看| 欧美喷水一区二区| 毛片不卡一区二区| 国产亚洲一二三区| 91啪亚洲精品| 舔着乳尖日韩一区| 久久夜色精品国产欧美乱极品| 国产成人av电影在线播放| 国产欧美日韩久久| 色婷婷亚洲精品| 日韩av电影免费观看高清完整版 | 亚洲精品视频免费观看| 色网站国产精品| 国产成人夜色高潮福利影视| 岛国一区二区在线观看| 亚洲人123区| 欧美午夜电影网| 蜜臀久久久99精品久久久久久| 欧美亚洲国产一区二区三区| 欧美一区二区成人| 欧美精品一区二区不卡| 波多野结衣精品在线| 亚洲精品国产一区二区三区四区在线 | 欧美探花视频资源| 久久99国产精品麻豆| 国产精品久久精品日日| 精品视频在线免费| 国产mv日韩mv欧美| 视频一区视频二区中文字幕| 欧美高清一级片在线观看| 欧美视频精品在线观看| 国产成人午夜片在线观看高清观看| 亚洲影视资源网| 欧美激情一区二区在线| 日韩视频免费观看高清完整版在线观看| 成人99免费视频| 紧缚奴在线一区二区三区| 午夜私人影院久久久久| 国产精品高清亚洲| 久久久青草青青国产亚洲免观| 欧美又粗又大又爽| av在线播放成人| 国产一区二区精品在线观看| 三级不卡在线观看| 亚洲欧美电影一区二区| 久久精品视频一区二区三区| 欧美一区二区三区播放老司机| 色婷婷av一区二区三区gif | 久久精品国产99久久6| 亚洲一区二区不卡免费| 亚洲日本在线观看| 欧美激情中文不卡| 久久久久国产精品人| 日韩午夜中文字幕| 欧美久久久久久久久| 欧美在线视频不卡| 色视频欧美一区二区三区| 不卡的av中国片| 粉嫩aⅴ一区二区三区四区五区| 国产综合一区二区| 国模娜娜一区二区三区| 久久成人精品无人区| 免费日韩伦理电影| 美国av一区二区| 久热成人在线视频| 久久精品理论片| 久久99国内精品| 国模娜娜一区二区三区| 国产一区二区女| 国产精品一品二品| 丰满放荡岳乱妇91ww| 国产丶欧美丶日本不卡视频| 国产精一区二区三区| 国产成人鲁色资源国产91色综| 国产成人av自拍| 成人一级片网址| 99v久久综合狠狠综合久久| 99re热视频精品| 欧美三日本三级三级在线播放| 欧美乱熟臀69xxxxxx| 欧美一级高清片| 欧美v国产在线一区二区三区| 久久久欧美精品sm网站| 国产精品色呦呦| 一区二区三区在线视频观看| 亚洲日本在线看| 婷婷国产在线综合| 精品在线免费视频| 高清成人在线观看| 色综合久久88色综合天天免费| 欧美精品123区| 国产精品一色哟哟哟| 成人精品国产一区二区4080| 色婷婷久久久久swag精品| 欧美老年两性高潮| 久久久久久久av麻豆果冻| 国产精品久久久久影视| 亚洲国产日韩a在线播放| 老司机免费视频一区二区 | 天堂久久久久va久久久久| 麻豆一区二区99久久久久| 国产高清久久久久| 欧美综合一区二区三区| 精品日韩99亚洲| 国产精品二三区| 亚洲一区二区高清| 国产精品综合一区二区三区| 91啪在线观看| 欧美xxxxxxxxx| 亚洲综合精品自拍| 国产精品一区二区x88av| 色八戒一区二区三区| 欧美大尺度电影在线| 国产精品福利一区二区三区| 免费人成精品欧美精品| 色综合天天天天做夜夜夜夜做| 678五月天丁香亚洲综合网| 中文字幕欧美国产| 视频一区免费在线观看| 91视视频在线观看入口直接观看www | 国产成人精品综合在线观看| 欧美日韩中文精品| 日本一区二区三级电影在线观看 | 色诱视频网站一区| 精品精品欲导航| 亚洲一区二区三区四区在线观看| 国产黄人亚洲片| 日韩欧美三级在线| 亚洲尤物在线视频观看| 丰满少妇在线播放bd日韩电影| 91精品国产乱| 亚洲大尺度视频在线观看| 波多野结衣精品在线| 精品国产凹凸成av人网站| 一二三区精品视频| 成人黄色电影在线 | 色呦呦日韩精品| 欧美国产欧美综合| 理论片日本一区| 欧美视频一区二区三区四区| 中文字幕一区二区三区四区| 国产高清不卡二三区| 欧美mv日韩mv国产网站| 首页亚洲欧美制服丝腿| 在线观看91视频| 一级精品视频在线观看宜春院| 成人美女视频在线观看18| www久久精品| 激情五月播播久久久精品| 在线综合亚洲欧美在线视频| 亚洲午夜三级在线| 欧美亚洲日本一区| 亚洲综合色自拍一区| 在线精品视频一区二区三四| 亚洲黄色免费电影| 色综合天天狠狠| 亚洲欧美日韩国产成人精品影院| 不卡的av电影在线观看| 国产精品久久久久久久久快鸭 | 美女视频黄 久久| 日韩免费在线观看| 极品少妇一区二区| 国产亚洲欧美日韩在线一区| 国产综合色产在线精品| 26uuu国产一区二区三区| 国产在线精品不卡| 欧美高清在线一区| 91网站在线播放| 亚洲国产美国国产综合一区二区| 欧美日韩国产中文| 蜜桃av噜噜一区| 精品精品国产高清a毛片牛牛 | 欧美日韩精品是欧美日韩精品| 亚洲电影视频在线| 日韩视频在线永久播放| 国产毛片一区二区| 中文字幕在线观看不卡视频| 一本久道久久综合中文字幕| 亚洲午夜激情网站| 精品国产一区久久| 国产一区二区三区免费看| 久久久影视传媒| 成人app在线| 偷偷要91色婷婷| 国产亚洲欧美色| 91小视频免费看| 日本一道高清亚洲日美韩| 久久久影视传媒| 91在线视频网址| 日韩精品成人一区二区三区| 国产欧美日韩麻豆91| 色综合中文字幕国产| 天天亚洲美女在线视频|