现在的问题是:
画了一个圆以后,(我是在Cview::OnLButtonUp函数/OnLbuttonDown/OnMouseMove里实现的)
1、如何当视窗改变大小时,图象能够保存下来?而不会消失?(我这样画出来的图象不能保存)大家是否能够告诉我,不管窗口发生什么变化,图象都能显示不变。
2、当画出一个圆以后,当用鼠标单击时,圆应该高亮显示,并且,在圆的四周显示出8个黑色点,点击这些小点,圆可以放大或者缩小(这就像在好多画图软件里表现的那样,尤其是在flash里),而且还可以进行圆的平移,删除,放大等功能。 对于第二个问题,我的思路是这样的:将要画的图形:比如说圆,放在picture控件里,这样,进行选定、平移、删除、放大等功能就好操作些。大家认为怎么样?
我的这种想法是否可行? 欢迎大家做出指点!尤其感谢那些带有详细代码并且有详细说明的朋友!分数不够,可以再加!再次表示感谢!
画了一个圆以后,(我是在Cview::OnLButtonUp函数/OnLbuttonDown/OnMouseMove里实现的)
1、如何当视窗改变大小时,图象能够保存下来?而不会消失?(我这样画出来的图象不能保存)大家是否能够告诉我,不管窗口发生什么变化,图象都能显示不变。
2、当画出一个圆以后,当用鼠标单击时,圆应该高亮显示,并且,在圆的四周显示出8个黑色点,点击这些小点,圆可以放大或者缩小(这就像在好多画图软件里表现的那样,尤其是在flash里),而且还可以进行圆的平移,删除,放大等功能。 对于第二个问题,我的思路是这样的:将要画的图形:比如说圆,放在picture控件里,这样,进行选定、平移、删除、放大等功能就好操作些。大家认为怎么样?
我的这种想法是否可行? 欢迎大家做出指点!尤其感谢那些带有详细代码并且有详细说明的朋友!分数不够,可以再加!再次表示感谢!
if(某个条件)
{
pDC->BitBlt(0,0,m_lWidth,m_lHeight,m_pMemDC,0,0,SRCCOPY);
}
第二个:同样,不过是在MOUSEMOVE中Bitblt,关于移动,可以定义一个Rect
if(Rect.PtInRect(MovePoint))则移动,画线,圆,BITBLT
关于内存DC,你可以查一下双缓冲,应该可以找得到的.
http://www.enet.com.cn/eschool/zhuanti/vc++/
http://www.cppblog.com/wlwlxj/archive/2005/12/20/1914.aspx
//是否在移动区和拉伸区
if(!m_bMove&&!m_bExtend)
{
//左上右上右下左下四个角点处拉伸
bool bExtend1,bExtend2,bExtend3,bExtend4;
bExtend1=bExtend2=bExtend3=bExtend4=false;
CRect MoveRect;
GetRect(m_BeginSelectPoint,m_EndSelectPoint,&MoveRect);
CRect TemRect;
TemRect.CopyRect(&MoveRect);
TemRect.DeflateRect(2,2);
//是否在移动区
if(TemRect.PtInRect(MovePoint))
{
m_nCursorType=CURSOR_MOVE;
SetCursor(m_hMoveCursor);
}
else
{
CPoint LeftUpPoint,RightDownPoint;
LeftUpPoint=MoveRect.TopLeft();
RightDownPoint=MoveRect.BottomRight();
CPoint LeftDownPoint(LeftUpPoint.x,RightDownPoint.y);
CPoint RightUpPoint(RightDownPoint.x,LeftUpPoint.y);
CPoint TemLeftUpPoint,TemRightDownPoint;
TemLeftUpPoint=TemRightDownPoint=LeftUpPoint;
TemLeftUpPoint.Offset(-2,-2);
TemRightDownPoint.Offset(2,2);
CRect ExtendRect1(TemLeftUpPoint,TemRightDownPoint);
if(ExtendRect1.PtInRect(MovePoint))
{
bExtend1=true;
m_nCursouAngle=1;
}