设备描述表及绘图

在windows平台下,所以的图形操作都是利用DC来完成的;
在相应WM_PAINT消息的代码中,要得到窗口的图形数据,必须调用 BeginPaint函数。

BeginPaint函数也只能在WM_PAINT消息中使用。在其他地方,只有使用GetDC来得到DC的句柄。调用ReleaseDC函数来释放DC所占用的资源,否则会引起内存泄漏。


this指针:
是一个隐含的指针,它指向对象本身的,代表了对象的地址。

设备描述表:

设备描述表是一个定义一组图形对象及其属性、影响输出的图形方式(数据)结构 。windows提供设备描述表,用于应用程序和物理设备之间进行交互,从而提供了应用程序设计的平台无关性。设备描述表又称为设备上下文,或者设备环境。   
  设备描述表是一种数据结构,它包括了一个设备(如显示器和打印机)的绘制属性相关的信息。所有的绘制操作通过设备描述表进行。设备描述表与大多WIN32结构不同,应用程序不能直接访问设备描述表,只能由各种相关API函数通过设备描述表的句柄间接访问该结构。 
   设备描述表总是与某种系统硬件设备相关 。比如屏幕设备描述表与显示设备相关,打印机设备描述表与打印设备相关等等。 
  屏幕设备描述表,一般我们简单地称其为设备描述表。它与显示设备具有一定的对应关系,在windows   GDI界面下,它总是相关与某个窗口或这窗口上的某个显示区域。通常意义上窗口的设备描述表,一般指的是窗口的客户区,不包括标题栏、菜单栏所占有的区域,而对于整个窗口来说,其设备描述表严格意义上来讲应该称为窗口设备描述表,它包含窗口的全部显示区域。二者的操作方法完全一致,所不同的仅仅是可操作的范围不同而已。 
   windows   窗口一旦创建,它就自动地产生了与之相对应的设备描述表数据结构,用户可运用该结构,实现对窗口显示区域的GDI操作,如划线、写文本、绘制位图、填充等,并且所有这些操作均要通过设备描述表句柄了进行。 

  1、  HDC hdc;
           hdc =:: GetDC ( m_hWnd );
          :: ReleaseDC ( m_hWnd , hdc );

   2、 CDC *pDC=GetDC();
           ReleaseDC ( pDC ); //需要释放设备描述表

    3、CClientDC dc(this); //已经将 ReleaseDC封装在里面了,不需要再调用 ReleaseDC.
    
    4、CWindowDC dc(this);

CPen
     CPen(   int   nPenStyle ,   int   nWidth ,   COLORREF   crColor   );
    在程序中,构造一个GDI对象后,该对象并不会立即生效,必须选入设备描述表中,它才会在以后的绘制操作中生效。
     CPen*   SelectObject(   CPen*   pPen   ); //该函数返回一个先前被选对象的指针。
    
    不能在 OnCtlColor里面设置字体,会造成闪烁现象。字体设置放在初始化中即可


使用位图画刷

CBrush::CBrush

CBrush( );

CBrush( COLORREF crColor );//创建一个颜色画刷
throw( CResourceException );

CBrush( int nIndex, COLORREF crColor );
throw( CResourceException );

CBrush( CBitmap* pBitmap );//创建一个位图画刷
throw( CResourceException );


创建位图对象时,要调用初始化函数LoadBitmap


透明画刷

HGDIOBJ GetStockObject(int 
     fnObject// stock object type 
       );
     利用GetStockObject函数获取一个黑色或白色的画刷句柄   NULL_BRUSH.
     static   CDC*   PASCAL   FromHandle(   HDC   hDC   );//从画刷句柄转换为画刷对象.
    
     CBrush  * brush = CBrush :: FromHandle (( HBRUSH ) GetStockObject ( NULL_BRUSH ));

创建一个指定的画刷:

CBrush::CreateSolidBrush

BOOL CreateSolidBrush( COLORREF crColor );

创建画刷即创建了GDI资源,需要释放GDI资源,否则会造成内存泄漏。

DeleteObject(m_hTextBrush);   


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值