MFC-在控件上显示BMP图片

在控件上绘制位图信息

	// 位图结构体
	BITMAPINFO *pBmpInfo;
	// 位图二进制数据
	BYTE * pBmpData;
	// 位图文件的头信息
	BITMAPFILEHEADER bmpHeader;
	// 位图文件中的位图信息
	BITMAPINFOHEADER bmpInfo;
	CFile bmpFile;
	if (!bmpFile.Open(_T("D://verisign.bmp"), CFile::modeRead | CFile::typeBinary)) {
		AfxMessageBox(L"打开失败");
	}
	// 读取位图文件的头信息
	if (bmpFile.Read(&bmpHeader, sizeof(BITMAPFILEHEADER)) != sizeof(BITMAPFILEHEADER))
		AfxMessageBox(L"读取bmpHeader");
	// 读取位图文件中位图信息
	if (bmpFile.Read(&bmpInfo, sizeof(BITMAPINFOHEADER)) != sizeof(BITMAPINFOHEADER))
		AfxMessageBox(L"读取bmpInfo");
	// 初始化位图信息
	pBmpInfo = (BITMAPINFO *)new char[sizeof(BITMAPINFOHEADER)];
	// 把位图信息拷贝给位图结构体
	memcpy(pBmpInfo, &bmpInfo, sizeof(BITMAPINFOHEADER));
	// 计算位图的实际字节数
	DWORD dataBytes = bmpHeader.bfSize - bmpHeader.bfOffBits;
	// 初始化位图实际数据
	pBmpData = (BYTE*)new char[dataBytes];
	// 从文件中读取剩下的位图数据
	bmpFile.Read(pBmpData, dataBytes);
	bmpFile.Close();
	//显示图像,获得pictrue控件窗口的句柄
	CWnd *pWnd = GetDlgItem(IDC_SHOW); 
	CRect rect;
	//获得pictrue控件所在的矩形区域
	pWnd->GetClientRect(&rect); 
	//获得pictrue控件的DC
	CDC *pDC = pWnd->GetDC();
	//指定拉伸模式
	pDC->SetStretchBltMode(COLORONCOLOR);
	StretchDIBits(pDC->GetSafeHdc(), 0, 0, bmpInfo.biWidth, bmpInfo.biHeight, 0, 0,
		bmpInfo.biWidth, bmpInfo.biHeight, pBmpData, pBmpInfo, DIB_RGB_COLORS
		, SRCCOPY);


你可能感兴趣的:(MFC-在控件上显示BMP图片)