📄 chap11_3.htm
字号:
</td>
<td width="78%">
<p align="JUSTIFY">把源位图反转然后拷贝到目的地
</td>
</tr>
<tr>
<td width="22%">
<p align="JUSTIFY">NOTSRCERASE
</td>
<td width="78%">
<p align="JUSTIFY">用或操作融合源和目的位图,然后再反转
</td>
</tr>
<tr>
<td width="22%">
<p align="JUSTIFY">PATCOPY
</td>
<td width="78%">
<p align="JUSTIFY">把图案拷贝到目的位图中
</td>
</tr>
<tr>
<td width="22%">
<p align="JUSTIFY">PATINVERT
</td>
<td width="78%">
<p align="JUSTIFY">用异或操作把图案与目的位图相融合
</td>
</tr>
<tr>
<td width="22%">
<p align="JUSTIFY">PATPAINT
</td>
<td width="78%">
<p align="JUSTIFY">用或操作融合图案和反转的源位图,然后用或操作把结果与目的位图融合
</td>
</tr>
<tr>
<td width="22%">
<p align="JUSTIFY">SRCAND
</td>
<td width="78%">
<p align="JUSTIFY">用与操作融合源位图和目的位图
</td>
</tr>
<tr>
<td width="22%">
<p align="JUSTIFY">SRCCOPY
</td>
<td width="78%">
<p align="JUSTIFY">把源位图拷贝到目的位图
</td>
</tr>
<tr>
<td width="22%">
<p align="JUSTIFY">SRCERASE
</td>
<td width="78%">
<p align="JUSTIFY">先反转目的位图,再用与操作将其与源位图融合
</td>
</tr>
<tr>
<td width="22%">
<p align="JUSTIFY">SRCINVERT
</td>
<td width="78%">
<p align="JUSTIFY">用异或操作融合源位图和目的位图
</td>
</tr>
<tr>
<td width="22%">
<p align="JUSTIFY">SRCPAINT
</td>
<td width="78%">
<p align="JUSTIFY">用或操作融合源位图和目的位图
</td>
</tr>
<tr>
<td width="22%">
<p align="JUSTIFY">WHITENESS
</td>
<td width="78%">
<p align="JUSTIFY">输出白色
</td>
</tr>
</table>
<p> </p>
<p align="JUSTIFY"> </p>
<p align="JUSTIFY">函数CDC::StretchBlt的声明为:</p>
<blockquote>
<blockquote>
<blockquote>
<p align="JUSTIFY">BOOL StretchBlt( int x, int y, int nWidth,
int nHeight, CDC* pSrcDC, int xSrc, int ySrc, int nSrcWidth,
int nSrcHeight, DWORD dwRop );</p>
</blockquote>
</blockquote>
</blockquote>
<p> </p>
<p align="JUSTIFY"> 该函数把位图从源矩形拷贝到目的矩形中,如果源和目的矩形尺寸不同,那么将缩放位图的功能以适应目的矩形的大小。函数的大部分参数与BitBlt的相同,但多了两个参数nSrcWidth和nSrcHeight用来指定源矩形的宽和高。</p>
<p align="JUSTIFY"> DDB的一个重要用途是用作设备上下文的显示表面。每一个设备上下文都包含有一个DDB,该位图实际上是在显示设备的缓冲区中(如视频内存),我们可以把它看做设备上下文的显示表面,设备上下文用GDI函数绘图实际上就是修改它所包含的DDB(显示表面)的过程。</p>
<p align="JUSTIFY"> 普通的设备上下文都是在屏幕上绘图的,而使用内存设备上下文则可以在系统内存中绘制图形。内存设备上下文是一种特殊的设备上下文,它将系统内存用作显示表面。程序可以使用内存设备上下文预先在系统内存中绘制复杂的图形,然后再快速地将其复制到实际的设备上下文的显示表面上,而绘制图形的结果仍保存在内存设备上下文的DDB中。</p>
<div align="center">
<center>
<table border="2" cellpadding="2" cellspacing="0" width="100%" bgcolor="#77D2FF">
<tr>
<td width="100%"> <b></b>提示:有人可能会想到用BitBlt函数把绘图结果从显示设备拷贝到内存设备上下文中,这种方法可以工作,但有时会出错。当源矩形被别的窗口遮住时,BitBlt会把别的窗口中的像素拷贝下来。<b></b></td>
</tr>
</table>
</center>
</div>
<p align="JUSTIFY"> 内存设备上下文缺省的DDB是一个1×1的单色位图,如此小的显示表面显然是没有用的,因此程序一般要为内存设备对象选择一个合适大小的彩色DDB。</p>
<p align="JUSTIFY">下面这段代码创建了一个内存设备上下文,并在其包含的DDB中画了一个灰色实心矩形,然后再把DDB输出到屏幕上。</p>
<blockquote>
<p align="JUSTIFY">void CMyView::OnDraw(CDC* pDC)</p>
<p align="JUSTIFY">{</p>
<p align="JUSTIFY"><b>. . .</b></p>
<p align="JUSTIFY"> <b></b>CDC MemDC;</p>
<p align="JUSTIFY">CBitmap bm,*oldBmp;</p>
<p align="JUSTIFY">MemDC.CreateCompatibleDC(pDC); //创建一个兼容的内存设备上下文</p>
<p align="JUSTIFY">bm.CreateCompatibleBitmap(pDC,100,50); //创建一个兼容的DDB</p>
<p align="JUSTIFY">oldBmp=MemDC.SelectObject(&bm);</p>
<p align="JUSTIFY">MemDC.SelectStockObject(BLACK_PEN);</p>
<p align="JUSTIFY">MemDC.SelectStockObject(GRAY_BRUSH);</p>
<p align="JUSTIFY">MemDC.Rectangle(0,0,50,50); //在DDB中画一个矩形</p>
<p align="JUSTIFY">pDC->BitBlt(0,0,100,50,&MemDC,0,0,SRCCOPY);</p>
<p align="JUSTIFY">MemDC.SelectObject(oldBmp); //使位图bm对象脱离设备上下文</p>
<p align="JUSTIFY"><b>. . .</b></p>
<p align="JUSTIFY">}</p>
</blockquote>
<p align="JUSTIFY"> 在上面的代码中,绘图的结果保存在位图bm中,一旦调用MemDC.SelectObject(oldBmp)使位图bm脱离设备上下文,该位图就可以被其它对象使用。</p>
<div align="center">
<center>
<table border="0" cellpadding="0" cellspacing="0" width="615">
<tr>
<td><a href="chap11_2.htm">上一页</a></td>
<td>
<p align="right"><a href="chap11_4.htm">下一页</a>
</td>
</tr>
</table>
<p><a href="http://www.cpcw.com">电脑报首页</a> <a href="../../index.htm">网络学院首页</a></p>
</center>
</div>
<font size="5">
<hr noshade color="#3973DE" size="1">
</font>
<p align="center"><font size="5"></font><font size="2" color="#000000">本教程由<a href="http://vcdynasty.yeah.net">Visual
C++王朝(Where programmers come together)</a>协助制作<br>
未经许可,请勿以任何形式复制</font>
</td>
</tr>
</table>
</center>
</div>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -