Partage
  • Partager sur Facebook
  • Partager sur Twitter

impression écran APi win32

    28 mai 2008 à 10:20:09

    Bonjour,

    J'essaie de faire une impression écran en api win32 avec le code suivant :
    BITMAP bm;
    WORD biBits;
    
    int screenWidth = GetSystemMetrics(SM_CXSCREEN);
    int screenHeight = GetSystemMetrics(SM_CYSCREEN);
    
    
    HDC hdcScreen = CreateDCA("DISPLAY", NULL, NULL, NULL);
    HDC hdcCompatible = CreateCompatibleDC(hdcScreen); //Création d'un context mémoire compatible
    HDC H = CreateCompatibleDC(hdcScreen);//Context destiné à recevoir la future image 8 bits
    HBITMAP bmp = CreateCompatibleBitmap(hdcScreen,screenWidth, screenHeight );
    SelectObject (hdcCompatible, bmp);//Liaison du HBITMAP avec le Context
    BitBlt(hdcCompatible,0,0,screenWidth,screenHeight,hdcScreen,0,0,SRCCOPY);//Copie de l'image de l'écran.
    


    Le compilateur me donne des undefined reference. Pourtant j'ai bien inclus <windows.h>. Quelqu'un sait d'où ca peut venir?
    • Partager sur Facebook
    • Partager sur Twitter
      28 mai 2008 à 10:22:57

      undefined reference ? des erreurs de link donc ?
      Il te manque certaines libs :) regarde la doc des fonctions que tu utilses.
      • Partager sur Facebook
      • Partager sur Twitter

      Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

        28 mai 2008 à 12:11:34

        La méthode est mauvaise.
        Le Printer driver ne gère pas les DC de la même façon que les Screen DC.
        Demander sur le newsgroup pro des apis
        (FR : fr.comp.os.ms-windows.programmation
        ou US : comp.os.ms-windows.programmer.win32)
        pour avoir la méthode MS officielle
        • Partager sur Facebook
        • Partager sur Twitter
          28 mai 2008 à 12:36:15

          void CaptureScreen(HWND hWndMain, long Left, long Top, long Width, long Height) 
          { 
              HDC srcDC; 
              HDC trgDC; 
              HBITMAP BMPHandle; 
              DEVMODE *dm; 
           
              srcDC = CreateDC("DISPLAY", "", "", &dm); 
              trgDC = CreateCompatibleDC(srcDC); 
              BMPHandle = CreateCompatibleBitmap(srcDC, Width, Height); 
              SelectObject(trgDC, BMPHandle); 
              BitBlt(trgDC, 0, 0, Width, Height, srcDC, Left, Top, SRCCOPY); 
              OpenClipboard(hWndMain); 
              EmptyClipboard(); 
              SetClipboardData(CF_BITMAP, BMPHandle); 
              CloseClipboard(); 
              DeleteDC(trgDC); 
              ReleaseDC(BMPHandle, srcDC); 
          }
          

          Citation : forum

          Les dimensions de la fenêtre principale, on peut les avoir avec GetWindowRect()

          Le hWnd "main" se retrouve par hWndMain = GetDesktopWindow();


          Repris d'un post sur forum Hardware.
          • Partager sur Facebook
          • Partager sur Twitter

          impression écran APi win32

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown