关于类似图层的解决方法(欢迎讨论,参与就有分)

shorthorn 2004-08-18 06:32:49
我现在遇到这样的问题:首先要绘制底图,底图的绘制比较耗时,然后在底图上绘制一些标志性的元素,并可以对标志性元素进行编辑移动.这样问题就出来了,在编辑或移动时,理论上讲,我不需要底图重绘,否则令人无法忍受.我只重绘这些标志性元素就可以了.同时,还要提供图形缩放功能.自然我考虑到了图层,就象phtoshop那样.我就用TransparentBlt API和内存设备环境.然而我发现又受内存限制非常厉害,同样photoshop就没有.
我在此恳求解决过类似问题的哥哥姐姐妹妹弟弟帮帮我吧!!
问题解决了,再多分都可以!
先行谢过.
...全文
75 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
holyeagle 2004-08-18
  • 打赏
  • 举报
回复
创建画笔的时候选xor,擦的时候在原来的地方再画一次就没有了
zhaogaojian 2004-08-18
  • 打赏
  • 举报
回复
其中OnDraw()省略一些代码,你自己添上去,不要说你不会操作内存位图
zhaogaojian 2004-08-18
  • 打赏
  • 举报
回复
如果你用Xor画笔的话就不会出现这种问题
void CDrawLine::Draw(CDC* pDC)
{
if(!this)
{//当前类为空,既无效类指针
return;
}
if(m_linestyle!=0)m_linewidth=1;
COLORREF CopyColor = GetPenColor();
if(this->m_bSelected)CopyColor=m_SelectColor;
CPen pen(m_linestyle, m_linewidth, CopyColor), *oldpen;

int oldmode = pDC->GetROP2();
oldpen = pDC->SelectObject(&pen);
pDC->SetROP2(R2_COPYPEN);
pDC->MoveTo(m_x1,m_y1);//移动当前绘图点为线段第一点
pDC->LineTo(m_x2,m_y2);//绘制直线
pDC->SelectObject(oldpen);
pDC->SetROP2(oldmode);
pen.DeleteObject();//释放笔资源
}

void CDrawLine::MoveAt(CDC *pDC, int flags, long x, long y)
{
//以下设置DC
CPoint point;
COLORREF XorColor = pDC->GetBkColor() ^ GetPenColor();

CPen pen(m_linestyle, m_linewidth, XorColor), *oldpen;
int oldmode = pDC->GetROP2();
oldpen = pDC->SelectObject(&pen);
pDC->SetROP2(R2_XORPEN);
//以下移动直线
if(m_bSelected)
{//以前已经选择了,取消热点
HotPoints(pDC);
}

pDC->MoveTo(m_x1,m_y1);//移动当前绘图点为线段第一点
pDC->LineTo(m_x2,m_y2);//绘制直线

//修改新图形坐标
if(flags == 1)
{
m_x1 += x-m_oldx, m_y1 += y-m_oldy;
}else if(flags == 3)
{
m_x2 += x-m_oldx, m_y2 += y-m_oldy;
}else if(flags == 5)
{
m_x1 += x-m_oldx;
m_x2 += x-m_oldx;
m_y1 += y-m_oldy;
m_y2 += y-m_oldy;

}
pDC->MoveTo(m_x1,m_y1);//移动当前绘图点为线段第一点
pDC->LineTo(m_x2,m_y2);//绘制直线


if(m_bSelected)
{//以前已经选择了,设置热点
HotPoints(pDC);
}
//以下恢复DC
pDC->SetROP2(oldmode);
pDC->SelectObject(oldpen);
pen.DeleteObject();//释放笔资源

}
其中的pDC是你的底图的dc.在OnDraw()函数中声明内存变量
CBitmap bmp;
CDC mDC;
调用这个类的
pDrawLine->Draw(&mDC);
pDrawLine->MoveAt(&mDC,x,y);

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧