我是C ++的新手,我正在使用Visual Studio 2012的MFC 如何从浏览按钮在图片控件中显示图像? 在浏览按钮单击时,我将路径设置为类似
的编辑控件void CSimilarityOfImagesDlg::OnBnClickedButton1()
{
CFileDialog dlg(TRUE);
int iRet = dlg.DoModal();
CString path = dlg.GetPathName();
SetWindowText (path);
CEdit* cedit;
cedit = reinterpret_cast<CEdit *>(GetDlgItem(IDC_EDIT1));
cedit->SetWindowTextW(path);
cedit->GetWindowTextW(path);
}
答案 0 :(得分:1)
MFC / ATL框架附带CImage
类,允许您加载图像(支持PNG,JPEG,BMP,GIF和其他格式)。要在图片控件中显示目标图像,您需要使用CStatic::SetBitmap()
方法。 CImage
类实现Detach()
方法,允许您直接访问HBITMAP
对象。这是一个例子:
m_PictureCtrl
在对话窗口头文件中定义,如下所示:
CStatic m_PictureCtrl;
使用标准 MFC数据交换机制将其映射到IDC_PIC_STATIC
控件ID。
void CTestPicDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_PIC_STATIC, m_PictureCtrl);
}
Browse Button处理程序如下所示:
CFileDialog dlg(TRUE);
if (dlg.DoModal() == IDOK)
{
CString sPath = dlg.GetPathName();
CImage img;
HRESULT hr = img.Load(sPath);
if (FAILED(hr))
{
CString sErrorMsg;
sErrorMsg.Format(_T("Failed to load %s"), sPath );
AfxMessageBox(sErrorMsg);
return;
}
CRect rect;
m_PictureCtrl.GetClientRect(rect);
int nWidth = rect.Width();
int nHeight = rect.Height();
CDC* pScreenDC = GetDC();
CDC MemDC;
MemDC.CreateCompatibleDC(pScreenDC);
CBitmap bmp;
bmp.CreateCompatibleBitmap(pScreenDC, nWidth, nHeight);
CBitmap *pOldObj = MemDC.SelectObject(&bmp);
img.StretchBlt(MemDC.m_hDC, 0, 0, nWidth, nHeight, 0, 0, img.GetWidth(), img.GetHeight(), SRCCOPY);
MemDC.SelectObject(pOldObj);
m_PictureCtrl.SetBitmap((HBITMAP)bmp.Detach());
ReleaseDC(pScreenDC);
}