zoukankan      html  css  js  c++  java
  • 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;
    
    
    };
    

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

  • 相关阅读:
    gitlab 简介
    gitlab安装配置(Ubuntu18和CentOS7)
    CentOS7 安装 vsftpd 服务
    CentOS7.5 系统最小化安装与初始化配置
    ubuntu1604系统初始化
    关于CGI和FastCGI的理解
    CentOS7安装OpenStack(Rocky版)-09.安装Cinder存储服务组件(控制节点)
    CentOS7安装OpenStack(Rocky版)-08.启动一个虚拟机实例
    CentOS7安装OpenStack(Rocky版)-07.安装horizon服务组件(控制节点dashboard)
    CentOS7安装OpenStack(Rocky版)-06.安装Neutron网络服务(控制节点)
  • 原文地址:https://www.cnblogs.com/HuaiNianCiSheng/p/3074723.html
Copyright © 2011-2022 走看看