簡體   English   中英

MFC C ++截圖

[英]MFC C++ Screenshot

我有一個使用CDC繪制網格的應用程序(它具有文本,矩形和位圖)。 我要保存該完成的網格的屏幕截圖,並將該屏幕截圖用作文件的“預覽”。

如何拍攝應用程序的屏幕截圖並保存?

謝謝,

答案在這里

void CScreenShotDlg::OnPaint()
{
    // device context for painting
    CPaintDC dc(this);

    // Get the window handle of calculator application.
    HWND hWnd = ::FindWindow( 0, _T( "Calculator" ));

    // Take screenshot.
    PrintWindow( hWnd,
                 dc.GetSafeHdc(),
                 0 );
}

最終,我最終這樣做了,因為我想甚至捕獲窗口的隱藏部分(因為內容超出了屏幕,需要滾動):

CDC* WindowToCaptureDC = AfxGetMainWnd()->GetWindowDC();
CDC CaptureDC;
CDC MemDC;
MemDC.CreateCompatibleDC(WindowToCaptureDC);
CaptureDC.CreateCompatibleDC(WindowToCaptureDC);

CBitmap CaptureBmp;
CBitmap ResizeBmp;
int pWidth = grid.tableWidth + grid.marginLeft*2;
int pHeight = grid.tableHeight + grid.marginBottom; 

CaptureBmp.CreateCompatibleBitmap( WindowToCaptureDC, pWidth, pHeight);
CaptureDC.SelectObject(&CaptureBmp);

CBrush brush(RGB(255, 255, 255));
CaptureDC.SelectObject(&brush);
CaptureDC.Rectangle(0, 0, pWidth, pHeight);

///像在OnDraw HERE一樣將項目拖入CaptureDC ///

double width = //desired width;
double height = //desired width;

    //maintain aspect ratio
if(pWidth!=width || pHeight!=height)
{
    double w = width/pWidth;
    double h = height/pHeight;
    if(w < h)
        height = height*w;
    else
        width = width*h;
}

ResizeBmp.CreateCompatibleBitmap(WindowToCaptureDC, width, height);
MemDC.SelectObject(&ResizeBmp);

MemDC.StretchBlt(0, 0, width, height, &CaptureDC, 0, 0, pWidth, pHeight, SRCCOPY);

CImage TempImageObj;
TempImageObj.Attach((HBITMAP)ResizeBmp.Detach());
CString filePath = _T("LOCATION\\image.bmp");
TempImageObj.Save(filePath);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM