C++本人也是初学者,很多地方也不是很懂,写博客的原因主要有以下三个原因:
1.对于学习的得思路和资料进行整理
2.为比我还菜的朋友提供一定得参考
3.请CSDN高手对我写的代码进行批评和指正。
首先还是建立四个变量
m_ImageShow:为COpenImageFileApp类中的一个CImage类型的公共变量
m_StrImageFileName:为COpenImageFileApp类中的一个CString类型的公共变量
m_ShowDRect:为COpenImageFileApp类中的一个CRect类型的公共变量
m_iType:为COpenImageFileApp类中的一个int类型的公共变量
按照 【C++】GDI+图像编程入门(一、图像的打开与显示编程)中写好打开图像的方法。
在资源视图中,添加好下面的菜单:(不知道怎么的不能上传图片,图片就省了)
在给个菜单上点击添加事件处理程序,给定事件名称,双击。
在各自的事件中添加如下代码:
void CGPShowView::OnShowone()
{
this->m_iType=0;
this->Invalidate();
}
void CGPShowView::OnShowtwo()
{
this->m_iType=1;
this->Invalidate();
}
void CGPShowView::OnShowthree()
{
this->m_iType=2;
this->Invalidate();
}
void CGPShowView::OnShowfour()
{
this->m_iType=3;
this->Invalidate();
}
void CGPShowView::OnShowfive()
{
this->m_iType=4;
this->Invalidate();
}
void CGPShowView::OnShowsix()
{
this->m_iType=5;
this->Invalidate();
}
void CGPShowView::OnShowseven()
{
this->m_iType=6;
this->Invalidate();
}
void CGPShowView::OnShoweight()
{
this->m_iType=7;
this->Invalidate();
}
void CGPShowView::OnShownine()
{
this->m_iType=8;
this->Invalidate();
}
void CGPShowView::OnShowten()
{
this->m_iType=9;
this->Invalidate();
}
在OnInitialUpdate中添加
void CGPShowView::OnInitialUpdate()
{
CScrollView::OnInitialUpdate();
CSize sizeTotal;
// TODO: 计算此视图的合计大小
sizeTotal.cx = sizeTotal.cy = 100;
SetScrollSizes(MM_TEXT, sizeTotal);
}
在OnDraw中添加
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);
//图像光栅特效显示
switch(m_iType)
{
case 0:
//使用AND操作符组合源和目标矩形颜色
m_ImageShow.StretchBlt(pDC->m_hDC,m_ShowDRect,SRCAND);
break;
case 1:
//使用OR操作符组合当前选择的画刷颜色和反转的源矩形颜色
m_ImageShow.StretchBlt(pDC->m_hDC,m_ShowDRect,PATPAINT);
break;
case 2:
//反转目标矩形
m_ImageShow.StretchBlt(pDC->m_hDC,m_ShowDRect,DSTINVERT);
break;
case 3:
//使用AND操作符合并当前选择的画刷和源矩形的颜色
m_ImageShow.StretchBlt(pDC->m_hDC,m_ShowDRect,MERGECOPY);
break;
case 4:
//使用OR操作符合并反转源矩形和目标矩形的颜色
m_ImageShow.StretchBlt(pDC->m_hDC,m_ShowDRect,MERGEPAINT);
break;
case 5:
//使用OR操作符组合源和目标矩形的颜色
m_ImageShow.StretchBlt(pDC->m_hDC,m_ShowDRect,SRCPAINT);
break;
case 6:
//复制反转的源矩形到目标矩形
m_ImageShow.StretchBlt(pDC->m_hDC,m_ShowDRect,NOTSRCCOPY);
break;
case 7:
//使用OR操作符组合源和目标矩形颜色后,然后反转
m_ImageShow.StretchBlt(pDC->m_hDC,m_ShowDRect,NOTSRCERASE);
break;
case 8:
//使用AND操作符组合源矩形颜色和目标矩形颜色的反转色
m_ImageShow.StretchBlt(pDC->m_hDC,m_ShowDRect,SRCERASE);
break;
case 9:
//使用XOR操作符组合源和目标矩形的操作符
m_ImageShow.StretchBlt(pDC->m_hDC,m_ShowDRect,SRCINVERT);
break;
}
}
这样具有各种不同的光栅效果的简单的程序我们就完成了,希望大家多练习,到时候连贯起来用。
本人也在学习GDI+,写得比较简单,让高手见笑了。欢迎高手给我指点
QQ:125941562
注:欢迎转载,请保留上面的作者信息