其他分享
首页 > 其他分享> > MFC中Picture Control控件的使用(通过文件对话框CFileDialog获取图片文件)

MFC中Picture Control控件的使用(通过文件对话框CFileDialog获取图片文件)

作者:互联网

在资源视图Dialog中添加Picture Control和Edit Control控件,此处我们控件ID为:IDC_ShowPic、IDC_EDIT_SRC
//点击Button
void CMFCDialogPrinterDlg::OnBnClickedOk()
{
	// TODO: 在此添加控件通知处理程序代码

	CString imagePath = L"";
	// TODO: 在此添加控件通知处理程序代码
	BOOL isOpen = TRUE;          //是否打开(否则为保存)  
	CString defaultDir = L".";   //默认打开的文件路径  
	CString fileName = L"";      //默认打开的文件名  
	CString filter = L"文件 (*.png; *.jpg)|*.png;*.jpg||";   //文件过虑的类型  
	CFileDialog openFileDlg(isOpen, defaultDir, fileName, OFN_HIDEREADONLY | OFN_READONLY, filter, NULL);
	openFileDlg.GetOFN().lpstrInitialDir = L"";
	INT_PTR result = openFileDlg.DoModal();
	CString filePath = defaultDir;
	if (result == IDOK) {
		filePath = openFileDlg.GetPathName();
		imagePath = filePath;
	}
	CWnd::SetDlgItemTextW(IDC_EDIT_SRC, filePath); //获取文件绝对路径,并显示到Edit Control文本框中,控件ID为IDC_EDIT_SRC 
	CWnd * pWnd = GetDlgItem(IDC_ShowPic);         //GetDlgItem,是根据继承关系的函数功能,返回窗口中指定参数ID的子元素的句柄,可以通过返回的句柄对窗口内的子元素进行操作。
    
	//imagePath
	CImage  image;
	CRect   rect;
	image.Load(filePath);
	//获取图片的宽 高度 
	//int cx, cy;
	//cx = image.GetWidth();
	//cy = image.GetHeight();
	//获取Picture Control控件的大小,ID为IDC_ShowPic  
	GetDlgItem(IDC_ShowPic)->GetWindowRect(&rect);
	//将客户区选中到控件表示的矩形区域内  
	ScreenToClient(&rect);
	//窗口移动到控件表示的区域
	GetDlgItem(IDC_ShowPic)->MoveWindow(rect.left, rect.top, rect.Width(), rect.Height(), TRUE);
	pWnd->GetClientRect(&rect);      //获取句柄指向控件区域的大小  

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

	SetStretchBltMode(pDc->m_hDC, STRETCH_HALFTONE);
	SetBrushOrgEx(pDc->m_hDC, 0, 0, NULL);
	image.Draw(pDc->m_hDC, rect);   //将图片绘制到picture表示的区域内  
	ReleaseDC(pDc);
}

效果运行结果如下:

运行效果

标签:Control,控件,文件,对话框,filePath,pDc,IDC,rect
来源: https://blog.csdn.net/qq_40589068/article/details/106684721