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