void CPicDlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
HDC hDC = ::GetWindowDC( GetDesktopWindow()->GetSafeHwnd() );
if( hDC )
{
HDC hOldDC = CreateCompatibleDC( hDC );
HDC hMemDC = CreateCompatibleDC( hDC );
TCHAR fileName[MAX_PATH] = {0};
OPENFILENAME ofn ;//
ZeroMemory(&ofn, sizeof(ofn));
ofn.lpstrFilter = TEXT("位图(*.bmp)\0*.bmp;\0");
ofn.lpstrDefExt = TEXT("bmp");
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = m_hWnd ;
ofn.hInstance = NULL;
ofn.nFilterIndex = 1;
ofn.lpstrCustomFilter = NULL;
ofn.nMaxCustFilter = 0;
ofn.lpstrFile = fileName;
ofn.nMaxFile = MAX_PATH;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
//ofn.lpstrInitialDir = ;
ofn.lpstrTitle = TEXT("保存交汇地图信息");
ofn.Flags = OFN_HIDEREADONLY ;
ofn.nFileOffset = 0;
ofn.nFileExtension = 0;
ofn.lCustData = 0L;
ofn.lpfnHook = NULL;
ofn.lpTemplateName = NULL;
//保存文件接口
RECT rtDestRect = {0};
::GetClientRect( GetDesktopWindow()->GetSafeHwnd(), &rtDestRect );
HBITMAP hOldBM = CreateCompatibleBitmap( hDC, rtDestRect.right - rtDestRect.left, rtDestRect.bottom - rtDestRect.top );
SelectObject( hOldDC, hOldBM );
BitBlt( hOldDC, 0, 0, rtDestRect.right - rtDestRect.left, rtDestRect.bottom - rtDestRect.top, hDC, 0, 0, SRCCOPY );
// int height = rtDestRect.bottom - rtDestRect.top;
// int weight = rtDestRect.right - rtDestRect.left;
Sleep( 200 );
HBITMAP hMemBM = CreateCompatibleBitmap( hOldDC,rtDestRect.right - rtDestRect.left, rtDestRect.bottom - rtDestRect.top ) ;
SelectObject( hMemDC , hMemBM );
StretchBlt( hMemDC, 0, 0, rtDestRect.right - rtDestRect.left, rtDestRect.bottom - rtDestRect.top, hOldDC, 0, 0, rtDestRect.right - rtDestRect.left, rtDestRect.bottom - rtDestRect.top, SRCCOPY );
LOOP:
if (!GetSaveFileName(&ofn))
{
DeleteDC( hMemDC );
DeleteObject( hMemBM );
::ReleaseDC( GetDesktopWindow()->GetSafeHwnd(), hDC );
return;
}
UINT num = 0, size = 0;
Gdiplus::ImageCodecInfo* pImageCodeInfo = NULL;
Gdiplus::GetImageEncodersSize( &num, &size );
if ( 0 == size )
{
DeleteDC( hMemDC );
DeleteObject( hMemBM );
::ReleaseDC( GetDesktopWindow()->GetSafeHwnd(), hDC );
return ;
}
pImageCodeInfo = ( Gdiplus::ImageCodecInfo* )new BYTE[size];
if ( NULL == pImageCodeInfo )
{
DeleteDC( hMemDC );
DeleteObject( hMemBM );
::ReleaseDC( GetDesktopWindow()->GetSafeHwnd(), hDC );
return ;
}
GetImageEncoders( num, size, pImageCodeInfo );
size = 0;
char m_szImgFile[MAX_PATH] = {0}; //用于保存返回的文件路径
for ( size = 0; size < num; ++size )
{
if ( 0 == wcscmp( pImageCodeInfo[size].MimeType, L"image/bmp" ))
{
WCHAR wcsFileName[256] = L"";
MultiByteToWideChar( CP_ACP, 0, fileName, -1, wcsFileName, 256 );
Gdiplus::Bitmap bitmap( hMemBM, NULL );
//保存为BMP文件
bitmap.Save( wcsFileName, &pImageCodeInfo->Clsid );
WideCharToMultiByte( CP_ACP, 0, wcsFileName, -1, m_szImgFile, 260, NULL, NULL );
delete pImageCodeInfo;
DeleteDC( hMemDC );
DeleteObject( hMemBM );
::ReleaseDC( GetDesktopWindow()->GetSafeHwnd(), hDC );
//AfxMessageBox( "截图成功!" , MB_OK);
return;
}
}
DeleteDC( hOldDC );
DeleteObject( hOldBM );
OnOK();
}
{
// TODO: 在此添加控件通知处理程序代码
HDC hDC = ::GetWindowDC( GetDesktopWindow()->GetSafeHwnd() );
if( hDC )
{
HDC hOldDC = CreateCompatibleDC( hDC );
HDC hMemDC = CreateCompatibleDC( hDC );
TCHAR fileName[MAX_PATH] = {0};
OPENFILENAME ofn ;//
ZeroMemory(&ofn, sizeof(ofn));
ofn.lpstrFilter = TEXT("位图(*.bmp)\0*.bmp;\0");
ofn.lpstrDefExt = TEXT("bmp");
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = m_hWnd ;
ofn.hInstance = NULL;
ofn.nFilterIndex = 1;
ofn.lpstrCustomFilter = NULL;
ofn.nMaxCustFilter = 0;
ofn.lpstrFile = fileName;
ofn.nMaxFile = MAX_PATH;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
//ofn.lpstrInitialDir = ;
ofn.lpstrTitle = TEXT("保存交汇地图信息");
ofn.Flags = OFN_HIDEREADONLY ;
ofn.nFileOffset = 0;
ofn.nFileExtension = 0;
ofn.lCustData = 0L;
ofn.lpfnHook = NULL;
ofn.lpTemplateName = NULL;
//保存文件接口
RECT rtDestRect = {0};
::GetClientRect( GetDesktopWindow()->GetSafeHwnd(), &rtDestRect );
HBITMAP hOldBM = CreateCompatibleBitmap( hDC, rtDestRect.right - rtDestRect.left, rtDestRect.bottom - rtDestRect.top );
SelectObject( hOldDC, hOldBM );
BitBlt( hOldDC, 0, 0, rtDestRect.right - rtDestRect.left, rtDestRect.bottom - rtDestRect.top, hDC, 0, 0, SRCCOPY );
// int height = rtDestRect.bottom - rtDestRect.top;
// int weight = rtDestRect.right - rtDestRect.left;
Sleep( 200 );
HBITMAP hMemBM = CreateCompatibleBitmap( hOldDC,rtDestRect.right - rtDestRect.left, rtDestRect.bottom - rtDestRect.top ) ;
SelectObject( hMemDC , hMemBM );
StretchBlt( hMemDC, 0, 0, rtDestRect.right - rtDestRect.left, rtDestRect.bottom - rtDestRect.top, hOldDC, 0, 0, rtDestRect.right - rtDestRect.left, rtDestRect.bottom - rtDestRect.top, SRCCOPY );
LOOP:
if (!GetSaveFileName(&ofn))
{
DeleteDC( hMemDC );
DeleteObject( hMemBM );
::ReleaseDC( GetDesktopWindow()->GetSafeHwnd(), hDC );
return;
}
UINT num = 0, size = 0;
Gdiplus::ImageCodecInfo* pImageCodeInfo = NULL;
Gdiplus::GetImageEncodersSize( &num, &size );
if ( 0 == size )
{
DeleteDC( hMemDC );
DeleteObject( hMemBM );
::ReleaseDC( GetDesktopWindow()->GetSafeHwnd(), hDC );
return ;
}
pImageCodeInfo = ( Gdiplus::ImageCodecInfo* )new BYTE[size];
if ( NULL == pImageCodeInfo )
{
DeleteDC( hMemDC );
DeleteObject( hMemBM );
::ReleaseDC( GetDesktopWindow()->GetSafeHwnd(), hDC );
return ;
}
GetImageEncoders( num, size, pImageCodeInfo );
size = 0;
char m_szImgFile[MAX_PATH] = {0}; //用于保存返回的文件路径
for ( size = 0; size < num; ++size )
{
if ( 0 == wcscmp( pImageCodeInfo[size].MimeType, L"image/bmp" ))
{
WCHAR wcsFileName[256] = L"";
MultiByteToWideChar( CP_ACP, 0, fileName, -1, wcsFileName, 256 );
Gdiplus::Bitmap bitmap( hMemBM, NULL );
//保存为BMP文件
bitmap.Save( wcsFileName, &pImageCodeInfo->Clsid );
WideCharToMultiByte( CP_ACP, 0, wcsFileName, -1, m_szImgFile, 260, NULL, NULL );
delete pImageCodeInfo;
DeleteDC( hMemDC );
DeleteObject( hMemBM );
::ReleaseDC( GetDesktopWindow()->GetSafeHwnd(), hDC );
//AfxMessageBox( "截图成功!" , MB_OK);
return;
}
}
DeleteDC( hOldDC );
DeleteObject( hOldBM );
OnOK();
}
}
keybd_event(VK_SNAPSHOT, 0, 0, 0);
keybd_event(VK_SNAPSHOT, 0, KEYEVENTF_KEYUP, 0);
Sleep(200);
HBITMAP hMemBM;
if (OpenClipboard())
{
hBitmap = (HBITMAP)GetClipboardData(CF_BITMAP);
if (NULL != hBitmap)
{
HBITMAP hOld = (HBITMAP)::SelectObject(hMemDC, hBitmap);
}
CloseClipboard();
}
这段代码是模拟系统截图