Avatar of Thomas Stockbruegger
Thomas Stockbruegger
Flag for Germany asked on

Need some help with rectangle of a bitmap

Hallo,
I need some help with this code that I found on the web.
The code works fine to do a Hardcopy of the complete screen.

But I would like to make a Hardcopy from a part of the screen, size of a rectangle that I would like to add to the code.
But I do not know how to do this, or to change the code.

Thank you for your help.
Best regards,
Thomas


 
        // get the device context of the screen
          HDC hScreenDC = CreateDC("DISPLAY", NULL, NULL, NULL);    

        // and a device context to put it in
          HDC hMemoryDC = CreateCompatibleDC(hScreenDC);

          int width = GetDeviceCaps(hScreenDC, HORZRES);
          int height = GetDeviceCaps(hScreenDC, VERTRES);

         // maybe worth checking these are positive values
          HBITMAP hBitmap = CreateCompatibleBitmap(hScreenDC, width, height);
      
         // get a new bitmap
          HBITMAP hOldBitmap = (HBITMAP) SelectObject(hMemoryDC, hBitmap);

          BitBlt(hMemoryDC, 0, 0, width, height, hScreenDC, 0, 0, SRCCOPY);
          hBitmap = (HBITMAP) SelectObject(hMemoryDC, hOldBitmap);


         // clean up
          DeleteDC(hMemoryDC);
          DeleteDC(hScreenDC);


        // now your image is held in hBitmap. You can save it or do whatever with it



//=========================== Drucken =================================================
       CDC memDC;
       CBitmap bitmap;

       int maxw = pDC->GetDeviceCaps(HORZRES);
       int maxh = pDC->GetDeviceCaps(VERTRES);
       pInfo->m_rectDraw.SetRect(0,0,maxw,maxh);

      
        if(!bitmap.Attach(hBitmap));
       BITMAP bm;
       bitmap.GetBitmap(&bm);
       BOOL ok= memDC.CreateCompatibleDC(pDC);
       memDC.SelectObject(&bitmap);

   
       //----------------------------- Drucken ----------------------------------------------------------------------------
        pDC->StretchBlt(0,0,6800,4800,&memDC,0,0,bm.bmWidth,bm.bmHeight, SRCCOPY);
     //--------------------------------------------------------------------------------------------------------------------------
 
       memDC.DeleteDC();
       bitmap.DeleteObject();
 
//=======================================================================================
Visual C++.NET* MFCC++

Avatar of undefined
Last Comment
Thomas Stockbruegger

8/22/2022 - Mon
ASKER CERTIFIED SOLUTION
sarabande

Log in or sign up to see answer
Become an EE member today7-DAY FREE TRIAL
Members can start a 7-Day Free trial then enjoy unlimited access to the platform
Sign up - Free for 7 days
or
Learn why we charge membership fees
We get it - no one likes a content blocker. Take one extra minute and find out why we block content.
Not exactly the question you had in mind?
Sign up for an EE membership and get your own personalized solution. With an EE membership, you can ask unlimited troubleshooting, research, or opinion questions.
ask a question
Thomas Stockbruegger

ASKER
Dear Sara,
Thank you for your answer.
Yes, this works.
BitBlt(hMemoryDC, 5,41,10000,415, hScreenDC, 5, 41, SRCCOPY);


note, the destination bitmap should be created with the needed sizes, then.
I think I have to do this, because the rest of the screen/bitmap is black.

I do not know how, can you help me.
pInfo->m_rectDraw.SetRect(0,0,maxw,maxh);<----- here?

Best regards,
Thomas
Thomas Stockbruegger

ASKER
//----------------------------- Drucken ----------------------------------------------------------------------------
        pDC->StretchBlt(5,41,6800,4800,&memDC,0,0,1000,415, SRCCOPY);
     //--------------------------------------------------------------------------------------------------------------------------
This will work
Thomas Stockbruegger

ASKER
pDC->StretchBlt(5,41,6800,4800,&memDC,5,41,1000,415, SRCCOPY); ....sorry I fast to fast
Experts Exchange has (a) saved my job multiple times, (b) saved me hours, days, and even weeks of work, and often (c) makes me look like a superhero! This place is MAGIC!
Walt Forbes
Thomas Stockbruegger

ASKER
Thank you for your help.
Best regards and a nice weekend.
Thomas