[学习笔记]MFC 中的CDC类

来源:互联网 发布:windows字体下载大全 编辑:程序博客网 时间:2024/05/01 16:57

CDC类定义的是设备上下文对象的类,有称设备环境对象类。CDC对象提供处理显示器或打印机等设备上下文的成员函数,以及处理与窗口客户区对应的显示上下文的成员.

 CDC类及其派生类也是MFC中的一个大类,和绘图相关。

通过CDC对象的成员函数进行所有的绘图。

CDC类操控图形大体分两类,一类是“画画儿”,另一个是“贴图”。前者好比你拿着画笔、画刷自己描线、涂染料,后者则是用现成的画儿通过贴、拼来完成画作。

CDC类最为常用的几个子类是:CPaintDC类,CClientDC类,CWindowDC类。

CClientDC,CPaintDC的区别:CPaintDC的对象一般用在OnPaint内以响应Windows消息WM_PAINT,自动完成绘制,在整个窗口内进行重画,维持原有窗口完整性。CClientDC应用在非响应Windows消息WM_PAINT的情况下,进行实时绘制,绘制的区域内被重画。

        CWindowDC与CClientDC,CPaintDC的区别:CWindowDC可在非客户区绘制图形,而CClientDC,CPaintDC只能在客户区绘制图形。CWindowDC下坐标原点是在屏幕的左上角,CClientDC,CPaintDC下坐标原点是在客户区的左上角。 举一个位图贴图的例子。

新建一个基于对话框的MFC程序,在资源编辑器中插入一个位图资源,ID号为IDB_BITMAP1,在对话框类的OnPaint()处理函数中加入:

void CXXDialog::OnPaint()

{

    CPaintDC dc(this);    // 设备环境,用CPaintDC类

    CBitmap bmp;          //声明位图类

    bmp.LoadBitmap(IDB_BITMAP1);      //载入位图

    BITMAP bmpInfo;

    bmp.GetObject(sizeof(bmpInfo),&bmpInfo); //获取位图信息

 

    CDC dcMemory;   

    dcMemory.CreateCompatibleDC(&dc);  //创建兼容内存环境

    dcMemory.SelectObject(&bmp);       //将位图选入兼容内存环境

 

    CRect rt;

    GetClientRect(rt);   //获取视图窗口的大小

//  pdc->BitBlt(0,0,rt.Width(),rt.Height(),&dcCompatible,0,0,SRCCOPY);

dc.StretchBlt(0,0,rt.Width(),rt.Height(),&dcMemory,0,0,bmpInfo.bmWidth, bmpInfo.bmHeight,SRCCOPY);       //位图贴图(拉伸式),BitBlt则不拉伸

    bmp.DeleteObject();     //这两句清除资源

    dcMemory.DeleteDC();    

}



0 0
原创粉丝点击