图形基础(八)

2010-12-30 21:10:52 · 作者: · 浏览: 40636
行程式
ReleaseDC (hwnd, hdc) ;

这个装置内容除了显示区域之外,还包括视窗的标题列、功能表、卷动列和框架(frame)。GetWindowDC函式很少使用,如果想尝试用一用它,则必须拦截处理WM_NCPAINT讯息,Windows使用该讯息在视窗的非显示区域上绘图。

BeginPaint、GetDC和GetWindowDC获得的装置内容都与视讯显示器上的某个特定视窗相关。取得装置内容代号的另一个更通用的函式是CreateDC:

hdc = CreateDC (pszDriver, pszDevice, pszOutput, pData) ;
其他行程式
DeleteDC (hdc) ;

例如,您可以通过下面的呼叫来取得整个萤幕的装置内容代号:

hdc = CreateDC (TEXT ("DISPLAY"), NULL, NULL, NULL) ;

在视窗之外写入画面一般是不恰当的,但对於一些不同寻常的应用程式来说,这样做很方便(您还可通过在呼叫GetDC时使用一个NULL参数,从而取得整个萤幕的装置内容代号,不过这在文件中已经提到了)。在第十三章中,我们将使用CreateDC函式来取得一个印表机装置内容代号。

有时您只是需要取得关於某装置内容的一些资讯而并不进行任何绘画,在这种情况下,您可以使用CreateIC来取得一个「资讯内容」的代号,其参数与CreateDC函式相同,例如:

hdc = CreateIC (TEXT ("DISPLAY"), NULL, NULL, NULL) ;

您不能用这个资讯内容代号往设备上写东西。

使用点阵图时,取得一个「记忆体装置内容」有时是有用的:

hdcMem = CreateCompatibleDC (hdc) ;
其他行程式
DeleteDC (hdcMem) ;

您可以将点阵图选进记忆体装置内容,然後使用GDI函式在点阵图上绘画。我将在第十四章讨论这些技术。

前面已经提到过,metafile是一些GDI呼叫的集合,以二进位形式编码。您可以通过取得metafile装置内容来建立metafile:

hdcMeta = CreateMetaFile (pszFilename) ;
其他行程式
hmf = CloseMetaFile (hdcMeta) ;

在metafile装置内容有效期间,任何用hdcMeta所做的GDI呼叫都变成metafile的一部分而不会显示。在呼叫