MFC gdi画图 孙鑫 第十章

1.

class CDC : public CObject

{

SetPixel(intx, inty, COLORREFcrColor)//画点

BOOL Ellipse(intx1, inty1, intx2, inty2);//画椭圆

BOOL Ellipse(LPCRECTlpRect);

BOOL Rectangle(intx1, inty1, intx2, inty2);//画矩形

BOOL Rectangle(LPCRECTlpRect);

}

2.

{//用法

CClientDC dc(this);

CPen pen(PS_SOLID,1,RGB(255,0,0));

dc.MoveTo();

dc.LineTo();

dc. Ellipse();

}

3.WindowGDI是资源,CGdiObject是类,CPen,CFont,CBitmap,CBrush都派生自这个类。

4.MFC提供两个对话框类:CFontDlg(选择字体对话框)和CColorDialog(选择颜色对话框)。

5. CWnd* GetDlgItem(intnID)函数获取控件或对话框的指针,然后用指针调用void GetWindowRect(LPRECTlpRect)获取屏幕坐标,值是以屏幕左上角为原点(lpRect->left=0,lpRect->top=0),需要调用void ScreenToClient(LPPOINTlpPoint)const;来转换成用户区坐标

6.对话框上的每一个控件被绘制时,都要向对话框发送一个WM_CTLCOLOR消息,该消息的响应函数

HBRUSH CtestDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINTnCtlColor)

{

   HBRUSH hbr = CDialog::OnCtlColor(pDC,pWnd, nCtlColor);

   // TODO:  在此更改DC 的任何属性

   // TODO:  如果默认的不是所需画笔,则返回另一个画笔

   return hbr;

}

该函数为对话框上每一个控件准备一个DC,可以设置这个DC。该函数返回一个画刷,用于控件绘制,可以改变这个画刷,实现背景色变化。所以这个消息响应函数会被多次调用

提示:CBrush重载了HBRUSH操作符

7.位图显示

WINGDIAPI BOOL   WINAPI BitBlt( __inHDChdc, __inintx,__ininty, __inintcx,__inintcy, __in_optHDChdcSrc,__inintx1, __ininty1,__inDWORDrop);//  该函数对指定的源设备环境区域中的像素进行位块(bit_block)转换,以传送到目标设备环境

窗口的绘制分两步:首先擦除窗口背景,然后对窗口重绘。

擦除窗口:程序发送WM_ERASEBKGND消息。BOOL OnEraseBkgnd(CDC* pDC)

{

       //把上面的代码写在这里

       return CView::OnEraseBkgnd(pDC);//这句要改为return   TRUE;,因为这句话会让上面的代码失去作用, OnEraseBkgnd如果擦除了窗口背景,返回非0,所以直接返回TRUE。

}

窗口重绘:OnDraw()//虚函数

            OnPaint() //WM_PAINT消息的响应函数

 

OnPaint调用OnDraw

未完待续...

猜你喜欢

转载自blog.csdn.net/jiaxiaokai/article/details/76850074