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

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

?? print.cpp

?? 英文版的 想要的話可以下載了 為大家服務
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/*
 * PRINT.CPP
 * Patron Chapter 20
 *
 * Implementation of printing functions for both CPatronDoc
 * and CPages classes.  These functions are here to keep clutter
 * down in document.cpp and pages.cpp.
 *
 * Copyright (c)1993-1995 Microsoft Corporation, All Rights Reserved
 *
 * Kraig Brockschmidt, Microsoft
 * Internet  :  kraigb@microsoft.com
 * Compuserve:  >INTERNET:kraigb@microsoft.com
 */

#include "patron.h"

static HWND g_hDlgPrint=NULL;
static BOOL g_fCancelPrint=FALSE;


/*
 * CPatronDoc::Print
 *
 * Purpose:
 *  Prints the current document.
 *
 * Parameters:
 *  hWndFrame       HWND of the frame to use for dialog parents.
 *
 * Return Value:
 *  BOOL            TRUE if printing happened, FALSE if it didn't
 *                  start or didn't complete.
 */

BOOL CPatronDoc::Print(HWND hWndFrame)
    {
    PRINTDLG        pd;
    BOOL            fSuccess;

    memset(&pd, 0, sizeof(PRINTDLG));
    pd.lStructSize=sizeof(PRINTDLG);
    pd.hwndOwner  =hWndFrame;
    pd.nCopies    =1;
    pd.nFromPage  =(USHORT)-1;
    pd.nToPage    =(USHORT)-1;
    pd.nMinPage   =1;
    pd.nMaxPage   =m_pPG->NumPagesGet();

    pd.lpfnPrintHook=PrintDlgHook;

    //Get the current document printer settings
    pd.hDevMode=m_pPG->DevModeGet();

    pd.Flags=PD_RETURNDC | PD_ALLPAGES | PD_COLLATE
        | PD_HIDEPRINTTOFILE | PD_NOSELECTION | PD_ENABLEPRINTHOOK;

    if (!PrintDlg(&pd))
        return FALSE;

    if (NULL!=pd.hDevMode)
        GlobalFree(pd.hDevMode);

    if (NULL!=pd.hDevNames)
        GlobalFree(pd.hDevNames);

    //Go do the actual printing.
    fSuccess=m_pPG->Print(pd.hDC, PSZ(IDS_DOCUMENTNAME), pd.Flags
        , pd.nFromPage, pd.nToPage, pd.nCopies);

    if (!fSuccess)
        {
        MessageBox(m_hWnd, PSZ(IDS_PRINTERROR)
            , PSZ(IDS_DOCUMENTCAPTION), MB_OK);
        }

    return fSuccess;
    }






/*
 * CPatronDoc::PrinterSetup
 *
 * Purpose:
 *  Selects a new printer and options for this document.
 *
 * Parameters:
 *  hWndFrame       HWND of the frame to use for dialog parents.
 *  fDefault        BOOL to avoid any dialog and just use the
 *                  default.
 *
 * Return Value:
 *  UINT            Undefined
 */

UINT CPatronDoc::PrinterSetup(HWND hWndFrame, BOOL fDefault)
    {
    PRINTDLG        pd;

    //Attempt to get printer metrics for the default printer.
    memset(&pd, 0, sizeof(PRINTDLG));
    pd.lStructSize=sizeof(PRINTDLG);

    if (fDefault)
        pd.Flags=PD_RETURNDEFAULT;
    else
        {
        pd.hwndOwner=hWndFrame;
        pd.Flags=PD_PRINTSETUP;

        //Get the current document printer settings
        pd.hDevMode=m_pPG->DevModeGet();
        }

    if (!PrintDlg(&pd))
        return FALSE;

    if (!m_pPG->DevModeSet(pd.hDevMode, pd.hDevNames))
        {
        GlobalFree(pd.hDevNames);
        GlobalFree(pd.hDevMode);
        return FALSE;
        }

    FDirtySet(TRUE);
    return 1;
    }



/*
 * PrintDlgHook
 *
 * Purpose:
 *  Callback hook for the Print Dialog so we can hide the Setup
 *  button.  Patron only allows Setup before anything exists on
 *  the page, and is not written to handle setup at Print time.
 */

UINT CALLBACK PrintDlgHook(HWND hDlg, UINT iMsg, WPARAM wParam
    , LPARAM lParam)
    {
    if (WM_INITDIALOG==iMsg)
        {
        HWND        hWnd;

        hWnd=GetDlgItem(hDlg, psh1);
        ShowWindow(hWnd, SW_HIDE);
        return TRUE;
        }

    return FALSE;
    }




/*
 * CPatronDoc::FQueryPrinterSetup
 *
 * Purpose:
 *  Returns whether or not the Printer Setup menu item can be
 *  enabled.  Once you create a tenant in any page, Printer Setup
 *  is voided simply to keep this sample simple, that is, we don't
 *  have to worry about reorganizing potentially large amounts
 *  of layout after we start plopping down objects.
 *
 * Parameters:
 *  None
 *
 * Return Value:
 *  BOOL            TRUE to enable the menu, FALSE otherwise.
 */

BOOL CPatronDoc::FQueryPrinterSetup(void)
    {
    return m_fPrintSetup;
    }




/*
 * CPages::DevModeSet
 *
 * Purpose:
 *  Provides the Pages with the current printer information.
 *
 * Parameters:
 *  hDevMode        HGLOBAL to the memory containing the DEVMODE.
 *                  This function assumes responsibility for this
 *                  handle.
 *  hDevNames       HGLOBAL providing the driver name and device
 *                  name from which we can create a DC for
 *                  information.
 *
 * Return Value:
 *  BOOL            TRUE if we could accept this configuration,
 *                  FALSE otherwise.  If we return TRUE we also
 *                  delete the old memory we hold.
 */

BOOL CPages::DevModeSet(HGLOBAL hDevMode, HGLOBAL hDevNames)
    {
    LPDEVNAMES      pdn;
    LPTSTR          psz;
    HGLOBAL         hMem;
    PDEVICECONFIG   pdc;
    LPDEVMODE       pdm;
    LPSTREAM        pIStream;
    HRESULT         hr;
    ULONG           cbDevMode, cbWrite;
    BOOL            fRet=FALSE;

    if (NULL==hDevMode || NULL==hDevNames)
        return FALSE;

    hr=m_pIStorage->OpenStream(SZSTREAMDEVICECONFIG, 0, STGM_DIRECT
        | STGM_WRITE | STGM_SHARE_EXCLUSIVE, 0, &pIStream);

    if (FAILED(hr))
        return FALSE;

    /*
     * DEVMODE is variable length--total length in hDevMode, so the
     * amount to write is that plus string space.  We subtract
     * sizeof(DEVMODE) as that is already included from GlobalSize.
     */
    cbDevMode=GlobalSize(hDevMode);
    cbWrite=cbDevMode+sizeof(DEVICECONFIG)-sizeof(DEVMODE);

    hMem=GlobalAlloc(GHND, cbWrite);

    if (NULL==hMem)
        {
        pIStream->Release();
        return FALSE;
        }

    pdc=(PDEVICECONFIG)GlobalLock(hMem);    //This always works
    pdm=(LPDEVMODE)GlobalLock(hDevMode);    //This might not

    if (NULL!=pdm)
        {
        pdc->cb=cbWrite;
        pdc->cbDevMode=cbDevMode;
        memcpy(&pdc->dm, pdm, (int)cbDevMode);
        GlobalUnlock(hDevMode);

        psz=(LPTSTR)GlobalLock(hDevNames);

        if (NULL!=psz)
            {
            pdn=(LPDEVNAMES)psz;
            lstrcpy(pdc->szDriver, psz+pdn->wDriverOffset);
            lstrcpy(pdc->szDevice, psz+pdn->wDeviceOffset);
            lstrcpy(pdc->szPort,   psz+pdn->wOutputOffset);

            pIStream->Write(pdc, cbWrite, &cbWrite);
            GlobalUnlock(hDevNames);
            fRet=TRUE;
            }
        }

    GlobalUnlock(hMem);
    GlobalFree(hMem);

    pIStream->Release();

    if (!fRet)
        return FALSE;

    GlobalFree(hDevNames);
    GlobalFree(hDevMode);

    return ConfigureForDevice();
    }




/*
 * CPages::DevModeGet
 *
 * Purpose:
 *  Retrieves a copy of the current DEVMODE structure for this
 *  Pages window.  The caller is responsible for this memory.
 *
 * Parameters:
 *  None
 *
 * Return Value:
 *  HGLOBAL         Handle to the memory containing the DEVMODE
 *                  structure.
 */

HGLOBAL CPages::DevModeGet(void)
    {
    HGLOBAL         hMem;
    LPVOID          pv;
    ULONG           cbDevMode, cbRead;
    LARGE_INTEGER   li;
    LPSTREAM        pIStream;
    HRESULT         hr;

    hr=m_pIStorage->OpenStream(SZSTREAMDEVICECONFIG, 0, STGM_DIRECT
        | STGM_READ | STGM_SHARE_EXCLUSIVE, 0, &pIStream);

    if (FAILED(hr))
        return FALSE;

    //Read how much to allocate for the DEVMODE structure
    LISet32(li, CBSEEKOFFSETCBDEVMODE);
    pIStream->Seek(li, STREAM_SEEK_SET, NULL);
    pIStream->Read(&cbDevMode, sizeof(ULONG), &cbRead);

    hMem=GlobalAlloc(GHND, cbDevMode);

    if (NULL!=hMem)
        {
        pv=(LPVOID)GlobalLock(hMem);
        pIStream->Read(pv, cbDevMode, &cbRead);
        GlobalUnlock(hMem);
        }

    pIStream->Release();
    return hMem;
    }







/*
 * CPages::DevReadConfig
 *
 * Purpose:
 *  Public function to read the current device configuration and
 *  optionally return an information context for it.
 *
 *
 * Parameters:
 *  ppcd            PCOMBINEDEVICE * in which to return a pointer
 *                  to an allocated structure that has all the
 *                  device information we want.  Ignored if NULL.
 *                  This is allocated with the task allocator.
 *  phDC            HDC * in which to return the information
 *                  context.  If NULL, no IC is created.  Caller
 *                  becomes responsible for the returned IC.
 *
 * Return Value:
 *  BOOL            TRUE if successful, FALSE otherwise.
 */

BOOL CPages::DevReadConfig(PCOMBINEDEVICE *ppcd, HDC *phDC)
    {
    HRESULT         hr;
    LPSTREAM        pIStream;
    LPMALLOC        pIMalloc;
    PCOMBINEDEVICE  pcd;
    ULONG           cb, cbRead;
    LARGE_INTEGER   li;

    hr=m_pIStorage->OpenStream(SZSTREAMDEVICECONFIG, 0, STGM_DIRECT
        | STGM_READ | STGM_SHARE_EXCLUSIVE, 0, &pIStream);

    if (FAILED(hr))
        return FALSE;

    /*
     * Allocate the COMBINEDEVICE structure including the variable
     * information past the DEVMODE part.
     */

    hr=CoGetMalloc(MEMCTX_TASK, &pIMalloc);

    if (FAILED(hr))
        {
        pIStream->Release();
        return FALSE;
        }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91首页免费视频| 亚洲精品中文在线观看| 99久久婷婷国产综合精品| 亚洲高清免费一级二级三级| 精品久久久久久久人人人人传媒| 成人激情文学综合网| 午夜日韩在线观看| 国产精品麻豆网站| 日韩欧美国产精品一区| 91日韩在线专区| 国产一区日韩二区欧美三区| 亚洲一区在线电影| 国产精品热久久久久夜色精品三区| 欧美日韩国产一级二级| eeuss影院一区二区三区| 精品综合久久久久久8888| 樱花草国产18久久久久| 中文字幕va一区二区三区| 欧美一卡在线观看| 欧美视频在线播放| 99r国产精品| 国产成人亚洲精品狼色在线| 免费看精品久久片| 午夜精品久久久久久久99水蜜桃| 国产精品青草久久| 国产亚洲成年网址在线观看| 欧美一区二区三区四区高清 | 91久久精品国产91性色tv| 国产精品2024| 1024国产精品| 亚洲国产激情av| 日韩三级免费观看| 国产精品少妇自拍| 精品国产百合女同互慰| 日韩亚洲欧美在线| 欧美一区二区视频网站| 欧美精品粉嫩高潮一区二区| 欧美在线观看18| 欧美性感一类影片在线播放| 色视频成人在线观看免| 91免费看片在线观看| 成人午夜又粗又硬又大| 风间由美一区二区三区在线观看| 国产一区二区不卡老阿姨| 国产综合久久久久久久久久久久| 精品在线亚洲视频| 国模套图日韩精品一区二区| 国产一区日韩二区欧美三区| 国产福利一区二区三区视频 | 日本一区二区视频在线| 久久精品一区二区三区不卡| 久久女同性恋中文字幕| 国产亚洲精品资源在线26u| 国产网站一区二区三区| 国产丝袜美腿一区二区三区| 中文字幕国产精品一区二区| 国产精品白丝在线| 亚洲高清不卡在线| 成人午夜视频在线观看| 成人白浆超碰人人人人| 97久久人人超碰| 欧美性生活一区| 91精品久久久久久久91蜜桃| 欧美一级艳片视频免费观看| 精品少妇一区二区三区免费观看| 久久一夜天堂av一区二区三区| 久久久精品国产99久久精品芒果| 国产午夜亚洲精品理论片色戒| 国产亚洲va综合人人澡精品| 中文字幕亚洲不卡| 亚洲午夜久久久久中文字幕久| 偷拍一区二区三区四区| 韩国精品免费视频| av成人老司机| 欧美日韩国产高清一区二区 | 国产欧美日韩在线| 亚洲婷婷在线视频| 天天影视涩香欲综合网 | 91伊人久久大香线蕉| 欧美日韩一区久久| 精品国产百合女同互慰| 亚洲激情综合网| 精品一二线国产| 91色porny| 亚洲精品一区二区三区精华液 | 亚洲午夜久久久久久久久久久| 天天做天天摸天天爽国产一区| 国产一区日韩二区欧美三区| 日本韩国一区二区三区| 精品久久久久久久久久久久久久久 | 久久精品99久久久| 91毛片在线观看| 日韩一级欧美一级| 亚洲乱码国产乱码精品精98午夜 | 中文字幕一区三区| 天堂va蜜桃一区二区三区| 成人一区二区三区视频| 欧美色图天堂网| 国产日本一区二区| 日本美女一区二区三区视频| a在线欧美一区| 精品久久人人做人人爰| 亚洲精品va在线观看| 国产不卡一区视频| 日韩免费一区二区| 亚洲一区二区三区四区五区中文| 国产精品888| 欧美精品一二三| 亚洲人成在线观看一区二区| 国内精品久久久久影院一蜜桃| 欧美色区777第一页| 日韩码欧中文字| 国产成人亚洲综合a∨猫咪 | 亚洲色图清纯唯美| 精品一区二区在线观看| 欧美xxxxx裸体时装秀| 亚洲小说春色综合另类电影| gogo大胆日本视频一区| 久久久综合九色合综国产精品| 日韩精品一二三四| 欧美无砖砖区免费| 亚洲欧美激情一区二区| 岛国av在线一区| 久久亚洲影视婷婷| 久久国产麻豆精品| 欧美一区二区三区在线观看视频| 亚洲资源中文字幕| 91麻豆国产精品久久| 中文av一区特黄| 风间由美一区二区av101| 国产午夜精品一区二区三区四区| 国产原创一区二区| 精品国产乱码久久久久久1区2区| 人妖欧美一区二区| 欧美一区二区在线免费观看| 亚洲6080在线| 69堂成人精品免费视频| 婷婷综合在线观看| 91精品国产品国语在线不卡| 午夜国产精品一区| 欧美蜜桃一区二区三区| 日韩一区精品视频| 欧美电影免费观看高清完整版在线 | 欧美大度的电影原声| 麻豆国产精品一区二区三区| 欧美一区二区三区播放老司机| 日韩电影免费在线| 日韩一级二级三级| 紧缚奴在线一区二区三区| 久久品道一品道久久精品| 丁香激情综合五月| 综合分类小说区另类春色亚洲小说欧美| 成人动漫在线一区| 一区二区三区小说| 欧美男同性恋视频网站| 蜜桃传媒麻豆第一区在线观看| 欧美成人伊人久久综合网| 国产精品一区二区不卡| 国产精品麻豆网站| 在线精品亚洲一区二区不卡| 午夜视频久久久久久| 精品国产sm最大网站| 国产东北露脸精品视频| 专区另类欧美日韩| 欧美日韩视频专区在线播放| 免费人成网站在线观看欧美高清| 欧美xxx久久| 99国产一区二区三精品乱码| 亚洲国产一区二区三区| 精品少妇一区二区三区在线视频| 国产一区二区免费视频| 国产精品成人免费精品自在线观看| 色婷婷综合中文久久一本| 五月婷婷综合在线| 久久亚洲私人国产精品va媚药| zzijzzij亚洲日本少妇熟睡| 亚洲高清视频中文字幕| 久久奇米777| 欧美性极品少妇| 国产乱人伦偷精品视频免下载| 1区2区3区精品视频| 欧美日韩国产片| 懂色av一区二区在线播放| 亚洲第一激情av| 久久精品亚洲一区二区三区浴池| 91年精品国产| 麻豆国产精品官网| 亚洲视频在线一区| 欧美videos大乳护士334| 99re热这里只有精品视频| 日韩中文字幕麻豆| 中日韩av电影| 欧美一级在线视频| 一本一道综合狠狠老| 色视频一区二区| 激情亚洲综合在线| 亚洲午夜视频在线| 国产精品污www在线观看| 91精品久久久久久久99蜜桃| 色综合欧美在线视频区|