C++本人也是初学者,很多地方也不是很懂,写博客的原因主要有以下三个原因:
1.对于学习的得思路和资料进行整理
2.为比我还菜的朋友提供一定得参考
3.请CSDN高手对我写的代码进行批评和指正。
这个例子很简单,在做程序编程时,我们首先还是得打开一个图片。
我们新建一个单文档的MFC工程,在打开菜单上面添加一个时间处理程序,命名为OnFileOpen,双击添加编辑,在OnFileOpen中添加如下代码:
void COpenImageFileView::OnFileOpen()
{
// TODO: 在此添加命令处理程序代码
CString strFilter;
CSimpleArray<GUID> aguidFileTypes;
HRESULT hResult;
hResult=m_ImageShow.GetExporterFilterString(strFilter,aguidFileTypes);
if(FAILED(hResult))
{
MessageBox("装入文件类型过滤器失败","信息提示",MB_OK);
return;
}
strFilter="ALL Files(*.*)|*.*|"+strFilter;
CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,strFilter);
hResult=(int)dlg.DoModal();
if(hResult!=IDOK)
{
return;
}
m_StrImageFileName.Format(dlg.GetFileName());
m_ImageShow.Destroy();
m_ShowDRect=CRect(0,0,1000,1000);
hResult=m_ImageShow.Load(m_StrImageFileName);
if(FAILED(hResult))
{
MessageBox("装入图像操作失败","信息提示",MB_OK);
return;
}
m_ShowDRect=CRect(0,0,m_ImageShow.GetWidth(),m_ImageShow.GetHeight());
// CClientDC dc(this);
// m_ImageShow.Draw(dc,m_ShowDRect);
//设置窗口标题栏文字
CWnd *pWnd=AfxGetMainWnd();
pWnd->SetWindowText("当前正在打开的图像文件名为:"+m_StrImageFileName);
//通知程序窗口更新
Invalidate();
}
m_ImageShow:为COpenImageFileApp类中的一个CImage类型的公共变量
m_StrImageFileName:为COpenImageFileApp类中的一个CString类型的公共变量
m_ShowDRect:为COpenImageFileApp类中的一个CRect类型的公共变量
这样我们已经把m_StrImageFileName加载到我们的程序中来了,现在我们再来显示图片
void CGPShowView::OnDraw(CDC* pDC)
{
CGPShowDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
//设置背景色
CBrush BackBrush;
BackBrush.CreateSolidBrush(RGB(128,128,128));
CBrush *pOldBrush=pDC->SelectObject(&BackBrush);
pDC->Rectangle(CRect(0,0,30000,30000));
pDC->SelectObject(pOldBrush);
//显示多格式图像文件
m_ImageShow.Draw(pDC->m_hDC,CRect(&m_ShowDRect));
}
这样一幅图片就加载到我们的界面上了。但是很快我们又发现了一个问题,如果图片过大的话我们只能显示部分图像,上网查了一下我发现我们可以添加一个这样的方法来设置滚动条:
SetScrollSizes(MM_TEXT,CSize(m_ShowDRect.Width(),m_ShowDRect.Height()));
SetScrollSizes的第一个参数可以为:(MSDN上拷贝的)
Mapping Mode | Logical Unit | Positive y-axis Extends... |
---|---|---|
MM_TEXT | 1 pixel | Downward |
MM_HIMETRIC | 0.01 mm | Upward |
MM_TWIPS | 1/1440 in | Upward |
MM_HIENGLISH | 0.001 in | Upward |
MM_LOMETRIC | 0.1 mm | Upward |
MM_LOENGLISH | 0.01 in | Upward |
写上去发现总是有错误,后来我才发现,原来是我在建COpenImageFileView时选择的基类为CView不对,后来改成CScrollView就成功了。
本人也在学习GDI+,写得比较简单,让高手见笑了。欢迎高手给我指点
QQ:125941562
注:欢迎转载,请保留上面的作者信息