Impression d'une image avec VC++ [Résolu]

Signaler
Messages postés
184
Date d'inscription
mercredi 8 décembre 2004
Statut
Membre
Dernière intervention
1 septembre 2010
-
Messages postés
184
Date d'inscription
mercredi 8 décembre 2004
Statut
Membre
Dernière intervention
1 septembre 2010
-
Bonjour à tous,

je cherche à imprimer une image.
J'ai essayé quelque chose mais ca ne fonctionne pas!

Si quelqu'un a une idée?

Voici mon code :

//....................................................................................................................................
   dcPrint.StartPage(); // Page 1
   
   CPoint coord;
   CSize Size;
   coord.x = Colone1;
   coord.y = 150;
   Size.cx = 32;
   Size.cy = 32;
   
   CBrush Brush;
   Brush.CreateSolidBrush(RGB(64,64,64));
   CBitmap image;
   if (image.LoadBitmap("C:\\zt\\Projets\\SdCardTool\\view\\France.bmp")  == 0)
    AfxMessageBox("");


   CPen Pen1;
   Pen1.CreatePen(PS_SOLID,5,RGB(64,64,64));
   dcPrint.SelectObject(Pen1);


   dcPrint.DrawState(coord,Size,&image,DSS_NORMAL,&Brush);
   
//....................................................................................................................................

Merci d'avance



--------------------------------------------------------------------------------
Phantom_2005

2 réponses

Messages postés
184
Date d'inscription
mercredi 8 décembre 2004
Statut
Membre
Dernière intervention
1 septembre 2010
1
J'ai trouvé une solution plus simple!

/************************************************/
void PrintBitmap(LPCTSTR filename) {
 CPrintDialog printDlg(FALSE);
 printDlg.GetDefaults();
 // Or get from user:
 // if (printDlg.DoModal() == IDCANCEL)  
 //        return;
 CDC dc;
 if (!dc.Attach(printDlg.GetPrinterDC())) {
  AfxMessageBox(_T("No printer found!")); return;
 }
 
 dc.m_bPrinting = TRUE;
 DOCINFO di;   
 // Initialise print document details
 ::ZeroMemory (&di, sizeof (DOCINFO));
 di.cbSize = sizeof (DOCINFO);
 di.lpszDocName = filename;
 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
 CPrintInfo Info;
 Info.SetMaxPage(1); // just one page
 int maxw = dc.GetDeviceCaps(HORZRES);
 int maxh = dc.GetDeviceCaps(VERTRES);
 Info.m_rectDraw.SetRect(0, 0, maxw, maxh);
 for (UINT page = Info.GetMinPage(); page <=
      Info.GetMaxPage() && bPrintingOK; page++) {
  dc.StartPage();    // begin new page
  Info.m_nCurPage = page;
  CBitmap bitmap;
  // LoadImage does the trick here, it creates a DIB section
  // You can also use a resource here
  // by using MAKEINTRESOURCE() ... etc.
  if(!bitmap.Attach(::LoadImage(
   ::GetModuleHandle(NULL), filename, IMAGE_BITMAP, 0, 0,
   LR_LOADFROMFILE | LR_CREATEDIBSECTION | LR_DEFAULTSIZE))) {
    AfxMessageBox(_T("Error loading bitmap!")); return;
   }
   BITMAP bm;
   bitmap.GetBitmap(&bm);
   int w = bm.bmWidth;
   int h = bm.bmHeight;
   // create memory device context
   CDC memDC;
   memDC.CreateCompatibleDC(&dc);
   CBitmap *pBmp = memDC.SelectObject(&bitmap);
   memDC.SetMapMode(dc.GetMapMode());
   dc.SetStretchBltMode(HALFTONE);
   // now stretchblt to maximum width on page
   dc.StretchBlt(0, 0, maxw, maxh, &memDC, 0, 0, w, h, SRCCOPY);
   // clean up
   memDC.SelectObject(pBmp);
   bPrintingOK = (dc.EndPage() > 0);   // end page
 }
 if (bPrintingOK)
   dc.EndDoc(); // end a print job
 else dc.AbortDoc();           // abort job.
}

/**************************************************/

Merci pour ta réponse vecchio56

@+
--------------------------------------------------------------------------------
Phantom_2005
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7