MFC开发-工作整理笔记

一、基本结构类型

1、点CPoint( );

CPoint( int initX, int initY );

CPoint( POINT initPt );

CPoint( SIZE initSize );

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

2、矩形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 );

3、尺寸大小CSize( );

CSize( int initCX, int initCY );

CSize( SIZE initSize );

CSize( POINT initPt );

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

 

二、获取客户区和DC

 

1、CDC、CClientDC、CPaintDC三者的关系:

CDC:是Windows绘图设备的基类。

CClientDC:可用在任何地方。构造函数中封装了GetDC(),析构函数中封装了ReleaseDC()函数。

CPaintDC:只用于重绘消息(WM_PAINT),构造函数中调用BeginPaint()取得设备上下文,析构函数中调用EndPaint()释放设备上下文,负责从消息队列中清除WM_PAINT消息,防止窗口不断重绘。

 

2、控件重绘

void Timeline::OnPaint()

{

       CPaintDC dc(this);//获取绘图DC

       CRect rc;

GetClientRect(&rc);// 获取客户端区域矩形

InvalidateRect(rc);// 使得客户区矩形区域失效

 

//通过dc进行绘图操作

 

UpdateWindow();//要求更新客户区矩形区域

       CWnd::OnPaint();

}

 

要更新UI窗口,有两种方法:

  1. 先调用InvalidateRect( clientRect ) 使得区域失效,再调用UpdateWindow可以实现立即更新。

2、直接调用RedrawWindow更新窗口UI 。

 

三、绘图相关

1、颜色

COLORREF RGB(

BYTE bRed,

BYTE bGreen,

BYTE bBlue

);

例如:

COLORREF red, gray;

red = RGB(255, 0, 0);

gray = RGB(128, 128,128);

2、画笔,线状图必须用笔(pen)来画,所以线的颜色就由笔色来确定。

CPen()

CPen( int nPenStyle, int nWidth, COLORREF crColor );

nPenStyle:

PS_SOLID, // 实心线

PS_DASH, // 线段

PS_DOT, // 点

PS_DASHDOT, // 线段、点

PSDASHDOTDOT // 线段、点、点

 

3、画刷, 面状图必须用刷(brush)来填充,所以面色是由刷色来确定的。

CBrush( );

CBrush( COLORREF crColor );

CBrush( int nIndex, COLORREF crColor );

nIndex:

HS_HORIZONTAL //水平线

HS_VERTICAL //垂直线

HS_FDIAGONAL //正斜线

HS_BDIAGONAL //反斜线

HS_CROSS //十字线(正网格)

HS_DIAGCROSS //斜十字线(斜网格)

4、字体,绘图时如果需要绘制文字,可以使用想要的文字风格

CFont font;

BOOL CFont::CreateFont(

int nHeight,                          //字体高度(逻辑单位)

int nWidth,                           //字体平均宽度(逻辑单位)

int nEscapement,               //字体倾斜角度

int nOrientation,                  //字体倾斜角度

int nWeight,                         //字体磅数

BYTE bItalic,                       //是否斜体

BYTE bUnderline,              //是否带下划线

BYTE cStrikeOut,              //是否带删除线

BYTE nCharSet,                //字体的字符集

BYTE nOutPrecision,        //输出精度

BYTE nClipPrecision,       //裁剪精度

BYTE nQuality,                   //字体的输出质量

BYTE nPitchAndFamily,    //字体间距和字体族

LPCTSTR lpszFacename //字体的字样名

);

例如:

       CFont font;

       font.CreateFontW(

              56, //字体高度

              26, //字体宽度

              900, //旋转显示(默认0):900表示逆时针旋转90度

              0, //字体倾斜角度

              10, //字体磅数

              FALSE, //非斜体

              FALSE, //无下划线

              FALSE, //无删除线

              DEFAULT_CHARSET, //使用缺省字符集

              OUT_DEFAULT_PRECIS, //缺省输出精度

              CLIP_DEFAULT_PRECIS,//缺省裁减精度

              DEFAULT_QUALITY, //字体的输出质量

              DEFAULT_PITCH, //字体间距和字体族

              L"@system"); //字体的字样名

       dc.SelectObject(font);//设置字体

 

5、DC绘图操作

我们要使用DC进行绘图,需要先设置好相应的画笔、画刷、字体信息。

设置画笔、画刷、字体。

CPen* SelectObject( CPen* pPen ); // 设置画笔

CBrush* SelectObject( CBrush* pBrush );// 设置画刷

CFont* SelectObject( CFont* pFont );// 设置字体

CBitmap* SelectObject( CBitmap* pBitmap );// 设置位图

 

CPen* GetCurrentPen( ) const; // 获取画笔信息

CBrush* GetCurrentBrush( ) const; // 获取画刷信息

CFont* GetCurrentFont( ) const; // 获取字体信息

CBitmap* GetCurrentBitmap( ) const; // 获取位图信息

CPalette* GetCurrentPalette( ) const; // 获取调色板信息

 

//获取、设置文字颜色

COLORREF GetTextColor( ) const;

COLORREF SetTextColor( COLORREF crColor );

//获取、设置文字背景色

COLORREF GetBkColor( ) const;

COLORREF SetBkColor( COLORREF crColor );

//设置背景模式

int GetBkMode( ) const; // 返回当前背景模式

int SetBkMode( int nBkMode ); // 返回先前背景模式

OPAQUE:不透明的(缺省值),空隙用背景色填充

TRANSPARENT:透明的,空隙处保持原背景图不变

 

       画点:dc.SetPixel(int x, int y, COLORREF crColor);

       画线:dc.MoveTo( int x, int y ); //将dc移动到指定位置

                dc.LineTo( int x, int y ); //从指定位置画到现在位置

       画折线:dc.Polyline( LPPOINT lpPoints, // 点集合

int nCount );// 点的数量

 

画矩形 (填充内部):dc.Rectangle( int leftTopX, int leftTopY,  // 左上角

int rightBottomX, int rightBottomY); // 右下角

 

       画圆角矩形 (填充内部):dc.RoundRect( int leftTopX, int leftTopY, // 左上角

int rightBottomX, int rightBottomY, //右下角

                                                             int nWidth, int nHeight); // 椭圆的宽和高

MFC开发-工作整理笔记_第1张图片

       画圆形(填充内部):dc.Ellipse( int leftTopX, int leftTopY, // 左上角

int rightBottomX, int rightBottomY); //右下角矩形

MFC开发-工作整理笔记_第2张图片

       画弧线:dc.Arc( int leftTopX, int leftTopY, // 左上角

int rightBottomX, int rightBottomY, // 右下角

int StartX, int StartY, // 弧的起点

int EndX, int EndY ); // 弧的终点(Arc 画圆弧是按逆时针方向.)

MFC开发-工作整理笔记_第3张图片

画直线到弧线:dc.AngleArc(int x, int y,  // 圆心

int nRadius, // 半径

float fStartAngle, // 起始角度(默认指向x轴正向)

float fSweepAngle); // 扫描角度

MFC开发-工作整理笔记_第4张图片

       画弧线(闭合):dc.Chord( int leftTopX, int leftTopY, // 左上角

int rightBottomX, int rightBottomY, // 右下角

int StartX, int StartY, // 弧的起点

int EndX, int EndY); // 弧的终点

MFC开发-工作整理笔记_第5张图片

       画饼状图:BOOL Pie( int leftTopX, int leftTopY, //左上角

int rightBottomX, int rightBottomY, //右下角

int StartX, int StartY, // 起始点

int EndX, int EndY); // 结束点

MFC开发-工作整理笔记_第6张图片

       填充矩形:dc.FillRect( LPCRECT lpRect, CBrush* pBrush )

dc.FillSolidRect( LPCRECT lpRect, COLORREF clr );

dc.FillSolidRect( int x, int y, int cx, int cy, COLORREF clr );

你可能感兴趣的:(c++,mfc,window)