//改变Hwnd即可以得到不同控件的句柄
//整个对话框中 每个元素都是一个窗体!
HWND hwnd = GetDlgItem(IDC_STATIC2)->GetSafeHwnd();
HDC hDC = ::GetWindowDC(hwnd);//获取DC
RECT rect;
::GetWindowRect(hwnd, &rect);//获取屏幕大小
HDC hDCMem = ::CreateCompatibleDC(hDC);//创建兼容DC
HBITMAP hBitMap = ::CreateCompatibleBitmap(hDC, rect.right-rect.left, rect.bottom-rect.top);//创建兼容位图
HBITMAP hOldMap = (HBITMAP)::SelectObject(hDCMem, hBitMap);//将位图选入DC,并保存返回值
::BitBlt(hDCMem, 0, 0, rect.right-rect.left, rect.bottom-rect.top, hDC, 0, 0, SRCCOPY);//将屏幕DC的图象复制到内存DC中
CImage image;//需要#include <atlimage.h>
image.Attach(hBitMap);
//image.Save(_T("c:\\B.jpg"));//如果文件后缀为.bmp,则保存为为bmp格式
//以下程序用于选择图片保存路径等信息
CString strFilter="位图文件(*.bmp)|*.bmp|JPEG 图像文件|*.jpg|GIF 图像文件|*.gif|PNG 图像文件|*.png||";
CFileDialog dlg(FALSE,"bmp","untitled.bmp",NULL,strFilter);
if ( IDOK != dlg.DoModal())
return;
// 如果用户没有指定文件扩展名,则为其添加一个
CString strFileName;
CString strExtension;
strFileName = dlg.m_ofn.lpstrFile;
if (dlg.m_ofn.nFileExtension == 0)
{
switch (dlg.m_ofn.nFilterIndex)
{
case 1:
strExtension = "bmp"; break;
case 2:
strExtension = "jpg"; break;
case 3:
strExtension = "gif"; break;
case 4:
strExtension = "png"; break;
default:
break;
}
strFileName = strFileName + '.' + strExtension;
}
// 图像保存
HRESULT hResult = image.Save(strFileName);
if (FAILED(hResult))
MessageBox("保存图像文件失败!");
else
MessageBox("保存图像文件成功!");
image.Detach();
::SelectObject(hDCMem, hOldMap);//选入上次的返回值
//释放
::DeleteObject(hBitMap);
::DeleteDC(hDCMem);
::DeleteDC(hDC);
MFC图片框中画的图形用CImage保存成多种格式
最新推荐文章于 2020-12-04 11:19:33 发布