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;

}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CDamogu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值