现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

MFC绘图总结(1):几何对象的结构和类

2012-12-24 22:39 工业·编程 ⁄ 共 2005字 ⁄ 字号 暂无评论

为了使用绘图函数,应该先了解绘图所用到的几种表示几何对象的结构和类。这些结构和类分别定义在头文件windef.h和afxwin.h中。

1.点

1)点结构POINT

点数据结构POINT用来表示一点的x、y坐标:

typedef struct tagPOINT {

LONG x;

LONG y;

} POINT;

2)点类CPoint

点类CPoint为一个没有基类的独立类,封装了POINT结构,有成员变量x和y,其构造函数有5种:

CPoint( );

CPoint( int initX, int initY );

CPoint( POINT initPt );

CPoint( SIZE initSize );

CPoint( LPARAM dwPoint ); // 低字设为x、高字设为y

CPoint类还定义了4个平移和设置函数:

void Offset(int xOffset, int yOffset);

void Offset(POINT point);

void Offset(SIZE size);

void SetPoint(int X, int Y);

CPoint类还重载了+、-、+=、-=、==、!=等运算符来支持CPoint对象和CPoint、POINT、SIZE对象之间的运算。

2.大小

1)大小结构SIZE

大小(size尺寸)结构SIZE用来表示矩形的宽cx和高cy:

typedef struct tagSIZE {

    LONG cx;

    LONG cy;

} SIZE;

2)大小类CSize

大小类CSize也为一个没有基类的独立类,封装了SIZE结构,有成员变量cx和cy,其构造函数也有5种:

CSize( );

CSize( int initCX, int initCY );

CSize( SIZE initSize );

CSize( POINT initPt );

CSize( DWORD dwSize ); // 低字设为cx、高字设为cy

CSizet类也重载了+、-、+=、-=、==、!=等运算符来支持CSize对象和CSize、POINT、SIZE、RECT对象之间的运算。

3.矩形

1)矩形结构RECT

矩形结构RECT定义了矩形的左上角与右下角的坐标:

typedef struct tagRECT {

LONG left;

LONG top;

LONG right;

LONG bottom;

} RECT;

2)矩形类CRect

矩形类CRect也为一个没有基类的独立类,封装了RECT结构,有成员变量left、top、right和bottom,其构造函数有6种:

CRect( );

CRect( int l, int t, int r, int b );

CRect( const RECT& srcRect );

CRect( LPCRECT lpSrcRect );

CRect( POINT point, SIZE size );

CRect( POINT topLeft, POINT bottomRight );

CRect类重载了=,+、-,+=、-=,==、!=,&、|,&=、|=等运算符来支持CRect对象和CRect、POINT、SIZE、RECT对象之间的运算。还定义了转换符LPCRECT和LPRECT来自动完成CRect对象到矩形结构和类指针LPCRECT和LPRECT的转换。

CRect类中常用的属性和成员函数有:

int Width( ) const;

int Height( ) const;

CSize Size( ) const;

CPoint& TopLeft( );

CPoint& BottomRight( );

CPoint CenterPoint( ) const;

void SwapLeftRight();

BOOL IsRectEmpty( ) const;

BOOL PtInRect( POINT point ) const;

void SetRect( int x1, int y1, int x2, int y2 );

void SetRect(POINT topLeft, POINT bottomRight);

void OffsetRect(int x, int y);

void MoveToXY(int x, int y);

3) 判断点是否在矩形中

有时需要判断某点(如鼠标位置)是否在某一矩形区域中,这可以调用CRect类的PtInRect函数来做:

BOOL PtInRect( POINT point ) const;

该函数当点point在其矩形区域内时,返回真。注意,该矩形区域不包括矩形的右边界和底边界。例如:

CRect rect( 10, 10, 371, 267 );

void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)

{

       // TODO: Add your message handler code here and/or call default

       if ( rect.PtInRect( point ) ) {

... ...

       }

... ...

       CView::OnLButtonUp(nFlags, point);

}

给我留言

留言无头像?