VisualStudio2022 MFC Dialog在窗体指定位置添加指定大小的图片

1.0 通过类向导添加WM_PAINT 即OnPaint函数

2.0 头文件

BOOL  ShowPic(CDC* pDC, CString lpstrFile, int sx, int sy, int nScrWidth, int nScrHeight);

3.0 C文件

//CBLToolsDlg继承DialogEx
//添加下面调用函数
void CBLToolsDlg::OnPaint()
{
	CPaintDC dc(this); 
	ShowPic(&dc, "C:\author.bmp", 0, 0, 100, 200);
}

4.0 实现代码

/*
* sx x轴
* sy y轴
* nScrWidth 图像宽度
* nScrHeight 图像高度
*/
BOOL  CBLToolsDlg::ShowPic(CDC* pDC, CString lpstrFile, int sx, int sy, int nScrWidth, int nScrHeight)
{
	IPicture* pPic;
	IStream*  pStm;
	BOOL      bResult;

	HANDLE    hFile = NULL;
	DWORD     dwFileSize, dwByteRead;
	//打开硬盘中的图形文件  
	hFile = CreateFile(lpstrFile, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
	if (hFile != INVALID_HANDLE_VALUE)
	{
		dwFileSize = GetFileSize(hFile, NULL);//获取文件字节数  
		if (dwFileSize == 0xFFFFFFFF)
		{
			CloseHandle(hFile);
			return FALSE;
		}
	}
	else
	{
		return FALSE;
	}

	//分配全局存储空间  
	HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, dwFileSize);
	if (hGlobal == NULL)  	return FALSE;

	LPVOID  pvData = GlobalLock(hGlobal);
	if (pvData == NULL)//锁定分配内存块  
	{
		GlobalFree(hGlobal);
		return FALSE;
	}
	ReadFile(hFile, pvData, dwFileSize, &dwByteRead, NULL);//把文件读入内存缓冲区  
	CloseHandle(hFile);//关闭打开的文件  

	GlobalUnlock(hGlobal);
	CreateStreamOnHGlobal(hGlobal, TRUE, &pStm);

	//装入图形文件  
	bResult = OleLoadPicture(pStm, dwFileSize, TRUE, IID_IPicture, (LPVOID*)&pPic);
	GlobalFree(hGlobal);

	if (FAILED(bResult))  return FALSE;

	long   hmWidth;//图片的真实宽度  
	long   hmHeight;//图片的真实高度  
	pPic->get_Width(&hmWidth);
	pPic->get_Height(&hmHeight);

	//将图形输出到屏幕上(有点像BitBlt)  
	bResult = pPic->Render(pDC->m_hDC, sx, sy, nScrWidth, nScrHeight, 0, hmHeight, hmWidth, -hmHeight, NULL);
	pPic->Release();

	return   TRUE;

}

你可能感兴趣的:(mfc,visual,studio,.net)