MFC Windows 程序设计(2)

window GDI

专用设备描述表类

CPaintDC  用于在窗口客户区画图(仅限于OnPaint处理程序)

CClientDC 用于在窗口客户区画图(OnPaint外的任何处理程序)

CWindowDC 用于在窗口内任意地方画图(包括非客户区)

CMetaFileDC 用于向GDI元文件画图

 

★在堆上用new创建设备描述表,要亲自释放设备描述表

CPaintDC *pdc =new CPaintDC(this);

delete pdc;

 

CPaintDC

CPaintDC类响应WM_PAINT消息,允许在客户区画图,但只能在OnPaint处理程序中使用。

CClientDC CWindowDC

程序需要全屏幕的访问权,此时创建CClientDCCWindowDC对象,并给构造函数传递一个NULL指针。

CClientDC dc(NULL);

dc.Ellipse(0,0,100,100);

设备描述表属性

Attribute

Default

Set With

Get with

文本颜色

Black

SetTextColor

GetTextColor

背景颜色

White

SetBkColor

GetBkColor

映射模式

MM_TEXT

SetMapMode

GetMapMode

绘图模式

R2_COPYPEN

SetROP2

GetROP2

当前位置

(0,0)

MoveTo

GetCurrentPosition

当前画笔

BLACK_PEN

SelectObject

SelectObject

当前画刷

WHITE_BRUSH

SelectObject

SelectObject

当前字体

SYSTEM_FONT

SelectObject

SelectObject

     如果想将背景色设为透明

dc.SetBkMode(TRANSPARENT)

     如果不想使用设备描述表是反复进行初始化,可以使用CDC::SaveDC保存它的状态,在下次使用时使用CDC::RestoreDC恢复.

映射模式

MM_TEXT                                1像素             x+ y+

MM_LOMETRIC              0.1mm             x+ y-

MM_HIMETRIC              0.01mm             x+ y-

MM_LOENGLISH              0.01in              x+ y-

MM_HIENGLISH             0.001in             x+ y-

MM_TWIPS                  1/ 1440in ( 0.0007in )   x+ y-

MM_ISOTROPIC              自定义            自定义

MM_ANISOTROPIC           自定义            自定义

获取设备信息

GetDeviceCaps()

参数                         返回值

HORZRES 以像素点数目表示显示平面的宽度

VERTRES以像素点数目表示显示平面的高度

HORZSIZE 以毫米表示显示平面的宽度

VERTSIZE 以毫米表示显示平面的高度

LOGPIXELSX 水平方向上每逻辑英寸内像素点的数目

LOGPIXELSY 竖直方向上没逻辑英寸内像素点的数目

NUMCOLORS 如果是显示设备,则返回静态颜色数目;如果是打印机或绘图仪,则返回能支持的颜色数目。

BISPIXEL 每个像素点的位的数目

PLANES 位平面的数目

RASTERCAPS 表述设备的某些特性的位标志,如设备是否为调色板式,设备是否能显示位图。

TECHNOLOGY 位标志,确定设备类型----屏幕、打印机、绘图仪等。

画一条正弦曲线

 

#include <math.h>

#define SEGMENTS 500

#define PI 3.1415926

 

 

void CMfc2View::OnPaint()

{

       CPaintDC dc(this); // device context for painting

      

       // TODO: Add your message handler code here

       CRect rect;

       GetClientRect(&rect);

       int nWidth=rect.Width();

       int nHeight=rect.Height();

       CPoint aPoint[SEGMENTS];

       for(int i=0;i<SEGMENTS;i++)

       {

              aPoint[i].x=(i*nWidth)/SEGMENTS;

              aPoint[i].y=(int)((nHeight/2)*(1-(sin((2*PI*i)/SEGMENTS))));

       }

       dc.Polyline(aPoint,SEGMENTS);

       // Do not call CView::OnPaint() for painting messages

}

//画一个不带黑色边框的矩形

dc.FillSolidRect(0,0,10,10,RGB(190,190,190));

 

 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值