您的位置:首页 > 其它

设备描述表及绘图

2015-07-28 12:39 211 查看
在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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: