• vc++ 学习笔记11


    图形的保存和重绘
    首先建立画图的四个选项:点,线,矩形,椭圆的按钮,并添加成员变量,表示每个图形的种类;
    其次添加m_drawtype,和cpoint记录用户选择的画图类型和点的坐标位置;
    添加消息响应函数,BUTTONDOWN和BTUTTONUP;并在函数里面实现画图的函数;

    void CGraphic1View::OnPoint() 
    {
    	// TODO: Add your command handler code here
    	m_nDrawType=1;
    }
    
    void CGraphic1View::OnLine() 
    {
    	// TODO: Add your command handler code here
    	m_nDrawType=2;
    }
    
    void CGraphic1View::OnRectangle() 
    {
    	// TODO: Add your command handler code here
    	m_nDrawType=3;
    }
    
    void CGraphic1View::OnElipse() 
    {
    	// TODO: Add your command handler code here
    	m_nDrawType=4;
    }
    
    void CGraphic1View::OnLButtonDown(UINT nFlags, CPoint point) 
    {
    	// TODO: Add your message handler code here and/or call default
    	
    	CView::OnLButtonDown(nFlags, point);
    	m_point=point;
    }
    
    void CGraphic1View::OnLButtonUp(UINT nFlags, CPoint point) 
    {
    	// TODO: Add your message handler code here and/or call default
    	CClientDC dc(this);
    	CBrush	*pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));//此处利用CBrush里面的静态创建Fromhandle()函数,通过一个dc句柄来创建一个画刷,dc句柄通过GetstockObject()获得,传递一个透明画刷,并强转成画刷格式;
    	dc.SelectObject(pBrush);
    
    	switch(m_nDrawType)
    	{
    	case 1:
    			dc.SetPixel(point,RGB(0,1,0));
    			break;
    	case 2:
    			dc.MoveTo(m_point);
    			dc.LineTo(point);
    			break;
    	case 3:
    			dc.Rectangle(CRect(m_point,point));
    			break;
    	case 4:
    			dc.Ellipse(CRect(m_point,point));
    			break;
    	default:
    			break;
    
    	}
    	CView::OnLButtonUp(nFlags, point);
    }
    


    此时可以画图,但是当窗口变化时,图像消失,因此,想到建立一个数据结构,保存用户画的图像特点,然后将其重画;因此插入一个普通类,保存图像数据;

    class CGraphic  
    {
    public:
    	CGraphic();
    	CGraphic(UINT m_SaveDrawType,CPoint m_StartPoint,CPoint m_EndPoint);//重载一个初始化函数,方便用户对3个成员变量赋值
    	virtual ~CGraphic();
    	
    public:
    	UINT m_SaveDrawType;
    	CPoint m_StartPoint;
    	CPoint m_EndPoint;
    
    
    };
    

    关于图形坐标的轮换操作需要重新疏导,有点乱

  • 相关阅读:
    在zend framework框架中try{}catch(Exception e){}的跳转问题
    【上】安全HTTPS-全面具体解释对称加密,非对称加密,数字签名,数字证书和HTTPS
    iOS 图像处理-剪裁图像
    Delphi DBGrid记录全选和反选拖动处理
    在DbGrid中,不按下Ctrl,单击鼠标如何实现多选?谢谢
    在DBGrid中实现多选功能
    回车跳到下一个EDIT
    远程控制篇:用Delphi模拟键盘输入/鼠标点击
    SQL的拼接语句在DELPHI中怎么写
    Delphi DbGridEh实现表格没有内容的渐变效果
  • 原文地址:https://www.cnblogs.com/HuaiNianCiSheng/p/3074723.html
Copyright © 2020-2023  润新知