MFC Picture控件显示图片并适应控件大小

通过加载本地路径下图片文件显示到控件,并使用控件大小显示

class CMyDlg
{
public:
	CMyDlg();
	void ShowImageToCtrl(CDC* cdc);
	
	CImage m_image;
protected:
	afx_msg void OnPaint();
}
CMyDlg::CMyDlg()
{
	m_image.Load("./image.png");//放到初始化中加载一次即可
}

void CMyDlg::OnPaint()
{
	ShowImageToCtrl(NULL);
}

void CMyDlg::ShowImageToCtrl(CDC* cdc)
{
	

	int cx, cy;
	CRect   rect;
	//获取图片的宽 高
	cx = m_image.GetWidth();
	cy = m_image.GetHeight();

	CWnd* pWnd = NULL;
	pWnd = GetDlgItem(IDC_STATIC_PIC);//获取控件句柄		
	pWnd->GetClientRect(&rect); //获取Picture Control控件的客户区

	CDC* pDC = NULL;
	pDC = pWnd->GetDC();//获取picture control的DC  

	int oldMode = SetStretchBltMode(pDC->m_hDC, STRETCH_HALFTONE);//设置指定设备环境中的位图拉伸模式		
	m_image.StretchBlt(pDC->m_hDC, rect, SRCCOPY);//从源矩形中复制一个位图到目标矩形,按目标设备设置的模式进行图像的拉伸或压缩
	SetStretchBltMode(pDC->m_hDC, oldMode);

	// 创建新字体
	CFont font;
	font.CreateFont(40, 0, 0, 0, FW_BOLD, FALSE, FALSE, 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_SWISS, _T("微软雅黑"));

	// 在设备上选择新字体
	CFont* pOldFont = pDC->SelectObject(&font);

	// 在图片上绘制文本
	CString strText = "Hello, World!";
	pDC->SetBkMode(TRANSPARENT);
	pDC->SetTextColor(RGB(255, 0, 0)); // 设置文本颜色为红色
	pDC->SetTextAlign(TA_CENTER); // 设置文本对齐方式为居中
	//pDC->TextOut(rect.left + rect.Width() / 2, rect.top + rect.Height() / 2, strText); // 绘制文本
	pDC->TextOut(rect.left + 100, rect.top + rect.Height() - 60, strText);
	pDC->SelectObject(pOldFont);
	ReleaseDC(pDC);
}

你可能感兴趣的:(MFC,mfc,c++,vs)