GDI绘图1——自定义函数

1
定义函数时注意
void类型无返回值,可以对外界的变量进行操作
对于有返回值的变量尽量不要对外界的变量进行操作,因为后来可能会考虑多种情况(比如drawState = State.move;外界也在使用drawState,那么返回的结果是不确定的)
2
全局变量
尽量少定义全局变量,因为其他地方会不会使用到他

3

编写程序时要注意此处变量使用对其他位置的影响。

4 三个自定义函数

     bool JudgingState(List<Shape> shapeList, int X, int Y)
        {
            var shape = JudgingShape(shapeList, X, Y);
            return shape == null ? false : true;
        }
        //功能函数,当鼠标在指定区域内,判断是哪个元素发生改变
        Shape JudgingShape(List<Shape> shapeList, int X, int Y)
        {
            Shape shapeItem=null;
            foreach (Shape item in shapeList)
            {
                if (item != null)
                {
                    if (item is Line)
                    {
                        double bianC = CountDistance(item.P1.X, item.P1.Y, item.P2.X, item.P2.Y);
                        double bianA = CountDistance(item.P1.X, item.P1.Y, X, Y);
                        double bianB = CountDistance(item.P2.X, item.P2.Y, X, Y);
                        if (bianA + bianB < bianC + rongChaZhi)
                        {
                            shapeItem = item;
                            break;
                        }
                    }
                    else if (item is MyRectangle)
                    {
                        double bianC1 = CountDistance(item.P1.X, item.P1.Y, item.P2.X, item.P1.Y);
                        double bianC2 = CountDistance(item.P2.X, item.P1.Y, item.P2.X, item.P2.Y);
                        double bianC3 = CountDistance(item.P2.X, item.P2.Y, item.P1.X, item.P2.Y);
                        double bianC4 = CountDistance(item.P1.X, item.P2.Y, item.P1.X, item.P1.Y);
                        double bianC1A = CountDistance(X, Y, item.P1.X, item.P1.Y);
                        double bianC1B = CountDistance(X, Y, item.P2.X, item.P1.Y);
                        double bianC2A = CountDistance(X, Y, item.P2.X, item.P1.Y);
                        double bianC2B = CountDistance(X, Y, item.P2.X, item.P2.Y);
                        double bianC3A = CountDistance(X, Y, item.P2.X, item.P2.Y);
                        double bianC3B = CountDistance(X, Y, item.P1.X, item.P2.Y);
                        double bianC4A = CountDistance(X, Y, item.P1.X, item.P2.Y);
                        double bianC4B = CountDistance(X, Y, item.P1.X, item.P1.Y);
                        if (bianC1A + bianC1B < bianC1 + rongChaZhi || bianC2A + bianC2B < bianC2 + rongChaZhi || bianC3A + bianC3B < bianC3 + rongChaZhi || bianC4A + bianC4B < bianC4 + rongChaZhi)
                        {
                            shapeItem = item;
                            break;
                        }
                    }
                    else if (item is Ellipse)
                    {

                    }
                    else
                    {
                        shapeItem = null;
                    }

                }
            }
            return shapeItem;
        }
        //计算距离公式
        private double CountDistance(double pAx, double pAy, double pBx, double pBy)
        {
            return Math.Sqrt(Math.Abs(pAx - pBx) * Math.Abs(pAx - pBx) + Math.Abs(pAy - pBy) * Math.Abs(pAy - pBy));
        }

GDI绘图程序:

在paint函数中只进行绘画

在mouseDown,mouseMove,mouseUp进行各种状态的判断

时间: 2024-08-28 15:56:13

GDI绘图1——自定义函数的相关文章

MFC GDI绘图基础

一.关于GDI的基本概念 什么是GDI? Windows绘图的实质就是利用Windows提供的图形设备接口GDI(Graphics Device Interface)将图形绘制在显示器上. 在Windows操作系统中,动态链接库C:/WINDOWS/system32/gdi32.dll(GDI Client DLL)中定义了GDI函数,实现与设备无关的包括屏幕上输出像素.在打印机上输出硬拷贝以及绘制Windows用户界面功能.在Visual C++6.0中的头文件C:/Program Files

MFC中的GDI绘图&lt;转&gt;

一.关于GDI的基本概念 什么是GDI? Windows绘图的实质就是利用Windows提供的图形设备接口GDI(Graphics Device Interface)将图形绘制在显示器上. 在Windows操作系统中,动态链接库C:\WINDOWS\system32\gdi32.dll(GDI Client DLL)中定义了GDI函数,实现与设备无关的包括屏幕上输出像素.在打印机上输出硬拷贝以及绘制Windows用户界面功能.在Visual C++6.0中的头文件C:\Program Files

GDI绘图中的映射模式CDC::SetMapMode()

原文链接:http://blog.csdn.net/charlessimonyi/article/details/8264572 在GDI绘图前,一般要设置映射模式.映射模式是什么呢?它是逻辑长度单位与实际长度单位的一中转换关系,比如我要画一个长为800单位,宽为600单位的矩形,那么在不同的映射模式下,一个单位可能相当于一个像素,也可能相当于一毫米,也可能相当于一微米.也就是说在有的映射模式下,我们指定的800单位的长度相当于800像素,在有的映射模式下,我们指定的800单位的长度相当于800

GDI+ 绘图闪烁解决方法

闲着没事,准备做一个类似于TeeChart的自定义控件,结果第一步的绘图就把我给难倒了,虽然早就知道GDI绘图的闪烁问题很坑,但是却没有想到如此之坑,折腾了两天,才找到解决方法. 首先在窗体加载的时候,加入双缓存,说实话以前一直没觉得这个双缓存有什么用,不过这次总算是有了点儿效果. DoubleBuffered = true; SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.ResizeRedraw | ControlSt

Windows GDI绘图基础知识

一.Windows可以画直线.椭圆线(椭圆圆周上的曲线)和贝塞尔曲线.////////////7 个画线函式是:(1)画直线LineTo    BOOL LineTo(HDC hdc,int nXEnd,int nYEnd);结合MoveToEx函数使用BOOL MoveToEx(HDC hdc,int X,int Y,LPPOINT lpPoint);Point记录了旧的坐标点(先前的当前位置).///注意:GetCurrentPositionEx (hdc, &pt) ;获得当前位置. (2

MFC中的GDI绘图(1)

一.关于GDI的基本概念 什么是GDI         Windows绘图的实质就是利用Windows提供的图形设备接口GDI(Graphics Device Interface)将图形绘制在显示器上. 在Windows操作系统中,动态链接库C:\WINDOWS\system32\gdi32.dll(GDI Client DLL)中定义了GDI函数,实现与设备无关的包括屏幕上输出像素.在打印机上输出硬拷贝以及绘制Windows用户界面功能.在Visual C++6.0中的头文件C:\Progra

MFC中的GDI绘图(2)

二.MFC中GDI绘图 GDI绘图包括以下步骤:获取设备环境,设置坐标映射,创建绘图工具,调用DC绘图函数绘图. 1.获取设备环境 (1)在SDK编程中,获取设备环境的方法有两种: <1>通过API函数BeginPaint.应用程序响应WM_PAINT消息进行图形刷新时主要通过BeginPaint函数获取设备环境,在消息处理函数返回前调用API函数EndPaint释放设备环境. 函数原型为:WINUSERAPI HDC WINAPI BeginPaint( HWND hWnd,LPPAINTS

MFC中的GDI绘图(4)

3.创建绘图工具并选入DC 有了画布,要绘图我们必须有画笔画刷.在Windows中有HPEN.HBRUSH等GDI对象,MFC对GDI对象进行了很好的封装,提供了封装GDI对象的类,如CPen.CBrush.CFont.CBitmap和CPalette等,这些类都是GDI对象类CGdiObject的派生类. 一般先创建画笔(刷),然后调用CDC::SelectObject函数将画笔(刷)选入设备环境最为当前绘图工具,绘图完毕恢复设备环境以前的画笔(刷)对象,最后调用CGdiObject::Del

Oracle自定义函数1

用户定义函数是存储在数据库中的代码块,可以把值返回到调用程序.调用时如同系统函数一样,如max(value)函数,其中,value被称为参数.函数参数有3种类型. IN 参数类型:表示输入给函数的参数. OUT 参数类型:表示参数在函数中被赋值,可以传给函数调用程序. IN OUT参数类型:表示参数既可以传值也可以被赋值. 1.语法格式: SQL语法方式创建的语法格式为: CREATE OR REPLACE FUNCTION function_name         /*函数名称*/(Para