青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 13,  comments - 16,  trackbacks - 0

自認(rèn)為注釋已經(jīng)很詳細(xì)了,沒有什么可說的,以后再用的時候如果還有哪不明白的就當(dāng)長教訓(xùn)了

BOOL CMYDlg::PrintPic(CString strFileName/*打印的圖片文件名,帶路徑*/,int iCopies/*打印次數(shù)*/,CString strPrintName/*指定打印機(jī)名,如果只有一臺打印機(jī)可忽略,相應(yīng)的注釋下面的一些代碼*/)

 CDC dc;
 CPrintDialog printDlg(FALSE);
 HGLOBAL hDevMode;
 HGLOBAL hDevNames;

//以下為判斷紙型,m_strPrintSize為類的成員變量

 short paperWidth = 0;
 short paperHeight = 0;
 if(0==m_strPrintSize.CompareNoCase("a3"))
 {
  paperWidth = 2970;
  paperHeight = 4200;
 }
 if(0==m_strPrintSize.CompareNoCase("a4"))
 {
  paperWidth = 2100;
  paperHeight = 2970;
 }
 if(0==m_strPrintSize.CompareNoCase("a5"))
 {
  paperWidth=1480;
  paperHeight=2100;
 }
 if(0==m_strPrintSize.CompareNoCase("a6"))
 {
  paperWidth = 1050;
  paperHeight = 1480;
 }

 BSTR   bstr=strFileName.AllocSysString();
 Bitmap* pPicture = new Bitmap(bstr);
 HBITMAP hBitmap;//創(chuàng)建bmp的句柄
 pPicture->GetHBITMAP(NULL,&hBitmap);//獲取句柄
 BITMAP bitmap;
 ::GetObject(hBitmap,sizeof(BITMAP),&bitmap);


 printDlg.GetDefaults();
 DEVMODE FAR *pDevMode=(DEVMODE FAR *)::GlobalLock(printDlg.m_pd.hDevMode);
 pDevMode->dmFields = pDevMode->dmFields | DM_PAPERSIZE;
 pDevMode->dmPaperSize = DMPAPER_USER;    //將打印紙?jiān)O(shè)置為自定義DMDO_90

/* if (bitmap.bmHeight<bitmap.bmWidth)
 {
  pDevMode->dmPaperWidth = paperHeight;
  pDevMode->dmPaperLength = paperWidth;
 }
 else
 {*/
  pDevMode->dmPaperWidth = paperWidth;
  pDevMode->dmPaperLength = paperHeight;
// }

 ::GlobalUnlock(printDlg.m_pd.hDevMode);

 ::DeleteObject(hBitmap);

 CPrintInfo Info;//
 if(GetPrinterDevice(strPrintName.GetBuffer(0), &hDevNames, &hDevMode))
 {
  printDlg.m_pd.hDevMode=hDevMode;
  printDlg.m_pd.hDevNames = hDevNames;
 }

 dc.Attach(printDlg.CreatePrinterDC()/*這里很重要,一定要CreatePrinterDC,要不然還是打印機(jī)默認(rèn)的紙型*/); // Attach a printer DC 讓HANDLE連接到dc上
 dc.m_bPrinting = TRUE;
 CString strTitle; // Get the application title ?
 strTitle.LoadString(AFX_IDS_APP_TITLE);
 DOCINFO di; // Initialise print document details DOCINFO中有相關(guān)的打印信息
 
 ::ZeroMemory (&di, sizeof (DOCINFO));
 di.cbSize = sizeof (DOCINFO);
 di.lpszDocName = strFileName;//設(shè)置標(biāo)題

 for (int i=0;i<iCopies;i++)
 {
  BOOL bPrintingOK = dc.StartDoc(&di); // Begin a new print job 開始打印
  
  // Get the printing extents and store in the m_rectDraw field of a
  // CPrintInfo object  
  Info.m_rectDraw.SetRect(0,0,dc.GetDeviceCaps(HORZRES),dc.GetDeviceCaps(VERTRES));//設(shè)置范圍

  Info.SetMaxPage (1);
  OnPrint(&dc, &Info,strFileName); // 往DC上畫圖片,具體實(shí)現(xiàn)在下面給出
  //OnEndPrinting(&dc, &Info); // 結(jié)束打印
  if (bPrintingOK)
   dc.EndDoc(); // end a print job
  else
   dc.AbortDoc(); // abort job. 
 }
 dc.Detach(); // detach the printer DC
 delete pPicture;
 pPicture=NULL;
 return TRUE;
}


相關(guān)函數(shù):
void OnPrint(CDC* pdc,CPrintInfo * lParam,CString strFileName1)
{
 CDC* pDC   = pdc;
 CPrintInfo* pInfo = (CPrintInfo *)lParam;
 
 CFont DataFont;
 DataFont.CreatePointFont(120,"宋體",pDC);
 
 CString strFileName=strFileName1;
 
 BSTR   bstr=strFileName.AllocSysString();
 Bitmap* pPicture = new Bitmap(bstr);
 pPicture->RotateFlip(Gdiplus::Rotate90FlipNone);
 HBITMAP hBitmap;//創(chuàng)建bmp的句柄
 pPicture->GetHBITMAP(NULL,&hBitmap);//獲取句柄
 BITMAP bitmap;
 ::GetObject(hBitmap,sizeof(BITMAP),&bitmap);
 double dScale=(double)pInfo->m_rectDraw.Width()/bitmap.bmWidth;
 //int nScaledWidth=m_cxWidth;
 int nScaledHeight=(int)(bitmap.bmHeight*dScale);
 
 HDC dcMem;
 dcMem=::CreateCompatibleDC(pDC->m_hDC);
 HBITMAP hOldBmp=(HBITMAP)::SelectObject(dcMem,hBitmap);
 
 CRect r = pInfo->m_rectDraw;
 SizeToPlace(STP_FIX, r, CRect(0,0,bitmap.bmWidth, bitmap.bmHeight));//這個函數(shù)沒有給出,可以自己寫一下,注釋掉也行,功能就是調(diào)整尺寸的
 int nVertCenterPos = pDC->GetDeviceCaps (VERTRES) / 2;
 ::StretchBlt(pDC->m_hDC, r.left, r.top, r.Width(), r.Height(),
  dcMem,0,0,bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);
 
 
 ::SelectObject(dcMem,hOldBmp);
 ::DeleteDC(dcMem);
 ::DeleteObject(hBitmap);
 delete pPicture;
 pPicture=NULL;

}
BOOL GetPrinterDevice(LPTSTR pszPrinterName, HGLOBAL* phDevNames, HGLOBAL* phDevMode)//從MSDN復(fù)制來的,獲取打印機(jī)設(shè)備
{
    // if NULL is passed, then assume we are setting app object's
    // devmode and devnames
    if (phDevMode == NULL || phDevNames == NULL)
        return FALSE;
 
    // Open printer
    HANDLE hPrinter;
    if (OpenPrinter(pszPrinterName, &hPrinter, NULL) == FALSE)
        return FALSE;
 
    // obtain PRINTER_INFO_2 structure and close printer
    DWORD dwBytesReturned, dwBytesNeeded;
    GetPrinter(hPrinter, 2, NULL, 0, &dwBytesNeeded);
    PRINTER_INFO_2* p2 = (PRINTER_INFO_2*)GlobalAlloc(GPTR,
        dwBytesNeeded);
    if (GetPrinter(hPrinter, 2, (LPBYTE)p2, dwBytesNeeded,
  &dwBytesReturned) == 0) {
  GlobalFree(p2);
  ClosePrinter(hPrinter);
  return FALSE;
    }
    ClosePrinter(hPrinter);
 
    // Allocate a global handle for DEVMODE
    HGLOBAL  hDevMode = GlobalAlloc(GHND, sizeof(*p2->pDevMode) +
  p2->pDevMode->dmDriverExtra);
    ASSERT(hDevMode);
    DEVMODE* pDevMode = (DEVMODE*)GlobalLock(hDevMode);
    ASSERT(pDevMode);
 
    // copy DEVMODE data from PRINTER_INFO_2::pDevMode
    memcpy(pDevMode, p2->pDevMode, sizeof(*p2->pDevMode) +
  p2->pDevMode->dmDriverExtra);
    GlobalUnlock(hDevMode);
 
    // Compute size of DEVNAMES structure from PRINTER_INFO_2's data
    DWORD drvNameLen = lstrlen(p2->pDriverName)+1;  // driver name
    DWORD ptrNameLen = lstrlen(p2->pPrinterName)+1; // printer name
    DWORD porNameLen = lstrlen(p2->pPortName)+1;    // port name
 
    // Allocate a global handle big enough to hold DEVNAMES.
    HGLOBAL hDevNames = GlobalAlloc(GHND,
        sizeof(DEVNAMES) +
        (drvNameLen + ptrNameLen + porNameLen)*sizeof(TCHAR));
    ASSERT(hDevNames);
    DEVNAMES* pDevNames = (DEVNAMES*)GlobalLock(hDevNames);
    ASSERT(pDevNames);
 
    // Copy the DEVNAMES information from PRINTER_INFO_2
    // tcOffset = TCHAR Offset into structure
    int tcOffset = sizeof(DEVNAMES)/sizeof(TCHAR);
    ASSERT(sizeof(DEVNAMES) == tcOffset*sizeof(TCHAR));
 
    pDevNames->wDriverOffset = tcOffset;
    memcpy((LPTSTR)pDevNames + tcOffset, p2->pDriverName,
        drvNameLen*sizeof(TCHAR));
    tcOffset += drvNameLen;
 
    pDevNames->wDeviceOffset = tcOffset;
    memcpy((LPTSTR)pDevNames + tcOffset, p2->pPrinterName,
        ptrNameLen*sizeof(TCHAR));
    tcOffset += ptrNameLen;
 
    pDevNames->wOutputOffset = tcOffset;
    memcpy((LPTSTR)pDevNames + tcOffset, p2->pPortName,
        porNameLen*sizeof(TCHAR));
    pDevNames->wDefault = 0;
 
    GlobalUnlock(hDevNames);
    GlobalFree(p2);   // free PRINTER_INFO_2
 
    // set the new hDevMode and hDevNames
    *phDevMode = hDevMode;
    *phDevNames = hDevNames;
    return TRUE;
}

posted on 2009-06-08 09:58 似水之心 閱讀(8283) 評論(0)  編輯 收藏 引用

只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理



<2009年6月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

常用鏈接

留言簿(2)

隨筆檔案

文章檔案

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲人成人77777线观看| 99亚洲一区二区| 欧美在线综合视频| 亚洲女人小视频在线观看| 欧美午夜免费电影| 亚洲欧美日韩在线综合| 亚洲欧美成人精品| 国产一区二区福利| 美女久久网站| 欧美韩日高清| 亚洲自拍偷拍麻豆| 久久成人18免费观看| 亚洲国产精品ⅴa在线观看 | 一区二区视频在线观看| 美日韩精品视频免费看| 欧美成人精品在线| 亚洲色图制服丝袜| 欧美在线观看一区二区| 亚洲精品综合精品自拍| 亚洲一区二区在线免费观看视频| 国产一区二区三区四区hd| 欧美激情1区2区3区| 欧美日韩另类在线| 久久久美女艺术照精彩视频福利播放| 久久视频精品在线| 亚洲一区二区三区在线| 久久精品国产一区二区电影| 99视频在线观看一区三区| 亚洲欧美日本精品| 亚洲免费电影在线观看| 亚洲欧美日本伦理| 亚洲精品国偷自产在线99热| 在线视频精品一| 亚洲激情一区二区三区| 亚洲欧美日韩国产成人| 亚洲伦理在线免费看| 久久riav二区三区| 国产精品99久久久久久久久| 久久久水蜜桃| 西瓜成人精品人成网站| 欧美日韩999| 免费黄网站欧美| 国产裸体写真av一区二区| 亚洲日本电影在线| 好看不卡的中文字幕| 亚洲视频免费观看| 亚洲精品影视在线观看| 久久精品视频在线看| 亚洲欧美日韩在线不卡| 欧美精品一区二区三区一线天视频| 午夜伦欧美伦电影理论片| 欧美精品久久一区| 欧美高清一区| 精品成人国产| 欧美尤物巨大精品爽| 午夜视频在线观看一区二区三区| 欧美另类一区二区三区| 亚洲国产va精品久久久不卡综合| 国内精品亚洲| 性伦欧美刺激片在线观看| 午夜亚洲精品| 欧美视频在线观看 亚洲欧| 亚洲国产视频直播| 亚洲国产日韩欧美在线图片| 久久久亚洲国产美女国产盗摄| 久久精品国产欧美激情| 国产一区二区高清| 欧美在线国产| 久久久久久电影| 狠狠操狠狠色综合网| 欧美中文字幕在线播放| 另类欧美日韩国产在线| 在线播放日韩| 久久中文精品| 亚洲福利国产| 在线视频一区观看| 国产精品v日韩精品| 亚洲午夜羞羞片| 久久精品国产亚洲aⅴ| 黄色亚洲免费| 蜜臀久久99精品久久久画质超高清 | 国产偷自视频区视频一区二区| 一区二区三区日韩精品视频| 篠田优中文在线播放第一区| 国产精品一区二区a| 欧美一区二区日韩| 免费久久99精品国产自| 亚洲精品中文字幕在线| 欧美性理论片在线观看片免费| 亚洲免费视频中文字幕| 鲁大师成人一区二区三区| 亚洲精品一区二区三区樱花 | 9l视频自拍蝌蚪9l视频成人| 欧美与黑人午夜性猛交久久久| 国产一区二区三区精品欧美日韩一区二区三区 | 久久精品国产一区二区三| 国产亚洲女人久久久久毛片| 久久精品一区四区| 另类激情亚洲| 99精品热6080yy久久| 国产精品美女| 久久男女视频| 一片黄亚洲嫩模| 免播放器亚洲| 亚洲一区二区综合| 在线日韩中文字幕| 欧美视频在线观看免费| 久久久青草婷婷精品综合日韩| 亚洲精品乱码久久久久久蜜桃91 | 一区二区三区四区五区在线| 国产精品色网| 欧美丰满高潮xxxx喷水动漫| 亚洲一区二区欧美| 亚洲第一天堂av| 欧美亚洲视频| 一区二区成人精品 | 欧美sm视频| 欧美一区亚洲一区| 正在播放亚洲| 欧美韩国一区| 久久精品一二三区| 亚洲视频在线二区| 91久久精品一区| 国产亚洲精品久久飘花 | 欧美在线一级va免费观看| 亚洲精品裸体| 欧美电影免费观看网站| 欧美一区视频| 一区二区三区视频在线| 亚洲观看高清完整版在线观看| 国产美女精品一区二区三区| 欧美日韩一二三四五区| 欧美精品www| 欧美成人亚洲成人| 久久一区中文字幕| 久久九九99视频| 欧美亚洲在线| 午夜天堂精品久久久久| 亚洲在线第一页| 亚洲综合国产| 午夜精彩视频在线观看不卡 | 欧美国产日韩在线观看| 久久躁狠狠躁夜夜爽| 欧美影院视频| 久久成年人视频| 性做久久久久久久免费看| 亚洲欧美日韩在线不卡| 亚洲欧美国产日韩中文字幕| 亚洲一区二区三区在线观看视频 | 1000部国产精品成人观看| 精品999日本| 在线看欧美视频| 亚洲国产岛国毛片在线| 最新69国产成人精品视频免费| 亚洲国产精品久久久| 亚洲精品久久久久久久久| 日韩一级在线| 亚洲欧美国产精品va在线观看| 亚洲欧美日韩视频一区| 欧美一区二区三区在| 久久天堂av综合合色| 欧美.日韩.国产.一区.二区| 欧美成人激情视频免费观看| 亚洲国产婷婷香蕉久久久久久99 | 老牛国产精品一区的观看方式| 麻豆av一区二区三区久久| 欧美成人乱码一区二区三区| 亚洲国产精品成人| 一区二区三区欧美视频| 欧美一区二区三区啪啪| 美乳少妇欧美精品| 欧美日本韩国| 国产日韩欧美另类| 亚洲激情女人| 午夜一区二区三区在线观看| 久久综合色播五月| 亚洲狼人综合| 欧美亚洲一区二区在线观看| 蜜臀a∨国产成人精品| 欧美色欧美亚洲高清在线视频| 国产麻豆9l精品三级站| 亚洲啪啪91| 欧美一区二区免费| 欧美激情一区三区| 亚洲一区免费在线观看| 久久久一二三| 国产精品第13页| 亚洲国产天堂久久综合| 亚洲一区二区三区欧美| 狂野欧美激情性xxxx| 一本久道久久久| 久久一区二区三区国产精品| 国产精品久久久久久超碰| 亚洲人成网站影音先锋播放| 亚洲欧美成人| 亚洲欧洲日产国产网站| 久久精品一区二区| 国产精品一区二区久久精品| 亚洲精品免费网站| 久热精品视频在线观看一区|