﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-cacar-文章分类-DirectX</title><link>http://www.cppblog.com/cacar/category/7187.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 27 May 2008 17:34:12 GMT</lastBuildDate><pubDate>Tue, 27 May 2008 17:34:12 GMT</pubDate><ttl>60</ttl><item><title>高级DirectDraw和位图图形（3）</title><link>http://www.cppblog.com/cacar/articles/51167.html</link><dc:creator>cacar</dc:creator><author>cacar</author><pubDate>Mon, 26 May 2008 11:25:00 GMT</pubDate><guid>http://www.cppblog.com/cacar/articles/51167.html</guid><wfw:comment>http://www.cppblog.com/cacar/comments/51167.html</wfw:comment><comments>http://www.cppblog.com/cacar/articles/51167.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cacar/comments/commentRss/51167.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cacar/services/trackbacks/51167.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;&nbsp; 例子如下：&nbsp;&nbsp;&nbsp;1//&nbsp;DEMO7_13.CPP&nbsp;8-bit&nbsp;blitting&nbsp;demo&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;3//&nbsp;INCLUDES&nbsp;////////////////////////////////////////...&nbsp;&nbsp;<a href='http://www.cppblog.com/cacar/articles/51167.html'>阅读全文</a><img src ="http://www.cppblog.com/cacar/aggbug/51167.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cacar/" target="_blank">cacar</a> 2008-05-26 19:25 <a href="http://www.cppblog.com/cacar/articles/51167.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>高级DirectDraw和位图图形（2） </title><link>http://www.cppblog.com/cacar/articles/51163.html</link><dc:creator>cacar</dc:creator><author>cacar</author><pubDate>Mon, 26 May 2008 10:06:00 GMT</pubDate><guid>http://www.cppblog.com/cacar/articles/51163.html</guid><wfw:comment>http://www.cppblog.com/cacar/comments/51163.html</wfw:comment><comments>http://www.cppblog.com/cacar/articles/51163.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cacar/comments/commentRss/51163.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cacar/services/trackbacks/51163.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 10pt">一、关于Blt<br>&nbsp;&nbsp;&nbsp; 直接通过主表面指针调用，指明源区域，源表面，目标区域，目标表面，Blt就可以。源表面和目标表面可以是同一个，不过不经常这样做。而且如果目标区域超出了目标表面的矩形范围，则会出现问题，因此必须裁剪。</p>
<span style="FONT-SIZE: 10pt">二、关于Clipper<br>&nbsp;&nbsp;&nbsp; 要设置DirectDraw裁剪，需要如下步骤<br>&nbsp;&nbsp;&nbsp; （1）创建裁剪器对象；<br>&nbsp;&nbsp;&nbsp; （2）创建裁剪序列（就是一个结构体保存的一系列RECT）；<br>&nbsp;&nbsp;&nbsp; （3）用IDIRECTDRAWCLIPPER::SetClipList()将裁剪器序列发送给裁剪器；<br>&nbsp;&nbsp;&nbsp;&nbsp;（4）用IDIRECTDRAWSURFACE7::SetClipper()将裁剪器同窗口或表面相关联。<br>&nbsp;&nbsp;&nbsp; 封装该过程如下：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; PADDING-LEFT: 4px; FONT-SIZE: 13px; BORDER-TOP: #cccccc 1px solid; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #000000">LPDIRECTDRAWCLIPPER&nbsp;DDraw_Attach_Clipper(LPDIRECTDRAWSURFACE7&nbsp;lpdds,<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;num_rects,<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LPRECT&nbsp;clip_list)<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br><img id=Codehighlighter1_185_2618_Open_Image onclick="this.style.display='none'; Codehighlighter1_185_2618_Open_Text.style.display='none'; Codehighlighter1_185_2618_Closed_Image.style.display='inline'; Codehighlighter1_185_2618_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_185_2618_Closed_Image onclick="this.style.display='none'; Codehighlighter1_185_2618_Closed_Text.style.display='none'; Codehighlighter1_185_2618_Open_Image.style.display='inline'; Codehighlighter1_185_2618_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; DISPLAY: none; BACKGROUND-COLOR: #ffffff" id=Codehighlighter1_185_2618_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_185_2618_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;this&nbsp;function&nbsp;creates&nbsp;a&nbsp;clipper&nbsp;from&nbsp;the&nbsp;sent&nbsp;clip&nbsp;list&nbsp;and&nbsp;attaches<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;it&nbsp;to&nbsp;the&nbsp;sent&nbsp;surface</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;index;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;looping&nbsp;var</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">LPDIRECTDRAWCLIPPER&nbsp;lpddclipper;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;pointer&nbsp;to&nbsp;the&nbsp;newly&nbsp;created&nbsp;dd&nbsp;clipper</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">LPRGNDATA&nbsp;region_data;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;pointer&nbsp;to&nbsp;the&nbsp;region&nbsp;data&nbsp;that&nbsp;contains<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;the&nbsp;header&nbsp;and&nbsp;clip&nbsp;list<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;first&nbsp;create&nbsp;the&nbsp;direct&nbsp;draw&nbsp;clipper</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(FAILED(lpdd</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">CreateClipper(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">lpddclipper,NULL)))<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">(NULL);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;now&nbsp;create&nbsp;the&nbsp;clip&nbsp;list&nbsp;from&nbsp;the&nbsp;sent&nbsp;data<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;first&nbsp;allocate&nbsp;memory&nbsp;for&nbsp;region&nbsp;data</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">region_data&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(LPRGNDATA)malloc(</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(RGNDATAHEADER)</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">num_rects</span><span style="COLOR: #000000">*</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(RECT));<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;now&nbsp;copy&nbsp;the&nbsp;rects&nbsp;into&nbsp;region&nbsp;data</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">memcpy(region_data</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">Buffer,&nbsp;clip_list,&nbsp;</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(RECT)</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">num_rects);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;set&nbsp;up&nbsp;fields&nbsp;of&nbsp;header</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">region_data</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">rdh.dwSize&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(RGNDATAHEADER);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">region_data</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">rdh.iType&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;RDH_RECTANGLES;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">region_data</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">rdh.nCount&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;num_rects;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">region_data</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">rdh.nRgnSize&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;num_rects</span><span style="COLOR: #000000">*</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(RECT);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">region_data</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">rdh.rcBound.left&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #000000">64000</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">region_data</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">rdh.rcBound.top&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #000000">64000</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">region_data</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">rdh.rcBound.right&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">64000</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">region_data</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">rdh.rcBound.bottom&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">64000</span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;find&nbsp;bounds&nbsp;of&nbsp;all&nbsp;clipping&nbsp;regions</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(index</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;index</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">num_rects;&nbsp;index</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_1440_2033_Open_Image onclick="this.style.display='none'; Codehighlighter1_1440_2033_Open_Text.style.display='none'; Codehighlighter1_1440_2033_Closed_Image.style.display='inline'; Codehighlighter1_1440_2033_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_1440_2033_Closed_Image onclick="this.style.display='none'; Codehighlighter1_1440_2033_Closed_Text.style.display='none'; Codehighlighter1_1440_2033_Open_Image.style.display='inline'; Codehighlighter1_1440_2033_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; DISPLAY: none; BACKGROUND-COLOR: #ffffff" id=Codehighlighter1_1440_2033_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1440_2033_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;test&nbsp;if&nbsp;the&nbsp;next&nbsp;rectangle&nbsp;unioned&nbsp;with&nbsp;the&nbsp;current&nbsp;bound&nbsp;is&nbsp;larger</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(clip_list[index].left&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;region_data</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">rdh.rcBound.left)<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;region_data</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">rdh.rcBound.left&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;clip_list[index].left;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(clip_list[index].right&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;region_data</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">rdh.rcBound.right)<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;region_data</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">rdh.rcBound.right&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;clip_list[index].right;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(clip_list[index].top&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;region_data</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">rdh.rcBound.top)<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;region_data</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">rdh.rcBound.top&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;clip_list[index].top;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(clip_list[index].bottom&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;region_data</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">rdh.rcBound.bottom)<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;region_data</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">rdh.rcBound.bottom&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;clip_list[index].bottom;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;end&nbsp;for&nbsp;index<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;now&nbsp;we&nbsp;have&nbsp;computed&nbsp;the&nbsp;bounding&nbsp;rectangle&nbsp;region&nbsp;and&nbsp;set&nbsp;up&nbsp;the&nbsp;data<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;now&nbsp;let's&nbsp;set&nbsp;the&nbsp;clipping&nbsp;list</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(FAILED(lpddclipper</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">SetClipList(region_data,&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)))<br><img id=Codehighlighter1_2220_2302_Open_Image onclick="this.style.display='none'; Codehighlighter1_2220_2302_Open_Text.style.display='none'; Codehighlighter1_2220_2302_Closed_Image.style.display='inline'; Codehighlighter1_2220_2302_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_2220_2302_Closed_Image onclick="this.style.display='none'; Codehighlighter1_2220_2302_Closed_Text.style.display='none'; Codehighlighter1_2220_2302_Open_Image.style.display='inline'; Codehighlighter1_2220_2302_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;</span><span style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; DISPLAY: none; BACKGROUND-COLOR: #ffffff" id=Codehighlighter1_2220_2302_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_2220_2302_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;release&nbsp;memory&nbsp;and&nbsp;return&nbsp;error</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;free(region_data);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">(NULL);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;end&nbsp;if<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;now&nbsp;attach&nbsp;the&nbsp;clipper&nbsp;to&nbsp;the&nbsp;surface</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(FAILED(lpdds</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">SetClipper(lpddclipper)))<br><img id=Codehighlighter1_2403_2485_Open_Image onclick="this.style.display='none'; Codehighlighter1_2403_2485_Open_Text.style.display='none'; Codehighlighter1_2403_2485_Closed_Image.style.display='inline'; Codehighlighter1_2403_2485_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_2403_2485_Closed_Image onclick="this.style.display='none'; Codehighlighter1_2403_2485_Closed_Text.style.display='none'; Codehighlighter1_2403_2485_Open_Image.style.display='inline'; Codehighlighter1_2403_2485_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;</span><span style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; DISPLAY: none; BACKGROUND-COLOR: #ffffff" id=Codehighlighter1_2403_2485_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_2403_2485_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;release&nbsp;memory&nbsp;and&nbsp;return&nbsp;error</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;free(region_data);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">(NULL);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;end&nbsp;if<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;all&nbsp;is&nbsp;well,&nbsp;so&nbsp;release&nbsp;memory&nbsp;and&nbsp;send&nbsp;back&nbsp;the&nbsp;pointer&nbsp;to&nbsp;the&nbsp;new&nbsp;clipper</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">free(region_data);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">(lpddclipper);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;end&nbsp;DDraw_Attach_Clipper</span></div>
<br>&nbsp;&nbsp;&nbsp; 上述过程可以如此调用<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; PADDING-LEFT: 4px; FONT-SIZE: 13px; BORDER-TOP: #cccccc 1px solid; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Codehighlighter1_20_29_Open_Image onclick="this.style.display='none'; Codehighlighter1_20_29_Open_Text.style.display='none'; Codehighlighter1_20_29_Closed_Image.style.display='inline'; Codehighlighter1_20_29_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_20_29_Closed_Image onclick="this.style.display='none'; Codehighlighter1_20_29_Closed_Text.style.display='none'; Codehighlighter1_20_29_Open_Image.style.display='inline'; Codehighlighter1_20_29_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"><span style="COLOR: #000000">RECT&nbsp;rect_list[</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; DISPLAY: none; BACKGROUND-COLOR: #ffffff" id=Codehighlighter1_20_29_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_20_29_Open_Text><span style="COLOR: #000000">{</span><span style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; DISPLAY: none; BACKGROUND-COLOR: #ffffff" id=Codehighlighter1_21_22_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_21_22_Open_Text><span style="COLOR: #000000">{}</span></span><span style="COLOR: #000000">,</span><span style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; DISPLAY: none; BACKGROUND-COLOR: #ffffff" id=Codehighlighter1_24_25_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_24_25_Open_Text><span style="COLOR: #000000">{}</span></span><span style="COLOR: #000000">,</span><span style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; DISPLAY: none; BACKGROUND-COLOR: #ffffff" id=Codehighlighter1_27_28_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_27_28_Open_Text><span style="COLOR: #000000">{}</span></span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;调用</span><span style="COLOR: #008000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #000000">LPDIRECTDRAWCLIPPER&nbsp;lpddclipper&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;DDraw_Attach_Clipper(lpddsback,</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">,rect_list);</span></div>
<br></span>
<img src ="http://www.cppblog.com/cacar/aggbug/51163.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cacar/" target="_blank">cacar</a> 2008-05-26 18:06 <a href="http://www.cppblog.com/cacar/articles/51163.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>高级DirectDraw和位图图形（1）</title><link>http://www.cppblog.com/cacar/articles/51160.html</link><dc:creator>cacar</dc:creator><author>cacar</author><pubDate>Mon, 26 May 2008 09:57:00 GMT</pubDate><guid>http://www.cppblog.com/cacar/articles/51160.html</guid><wfw:comment>http://www.cppblog.com/cacar/comments/51160.html</wfw:comment><comments>http://www.cppblog.com/cacar/articles/51160.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cacar/comments/commentRss/51160.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cacar/services/trackbacks/51160.html</trackback:ping><description><![CDATA[<div style="FONT-SIZE: 10pt" class=post_content>一、关于高彩<br>&nbsp;&nbsp;&nbsp; 其实就是在SetDisplayMode中把BPP改成想要的16,24,32...然后读写显存的时候只需要根据Lock返回的ddsd.lpSurface得到显存指针，根据你的像素格式（16，24抑或32）来设置像素点，根据x,y找到对应像素，写就是了。<br>二、关于双缓冲<br>&nbsp;&nbsp;&nbsp; 创建双缓冲的步骤：<br>&nbsp;&nbsp;&nbsp; 1.将DDSD_BACKBUFFERCOUNT加到dwFlags标志字段，向DirectDraw表明DDSURFACEDESC2结构的dwBackBufferCount有效，其中包含后备缓冲的数目（比如1）；<br>&nbsp;&nbsp;&nbsp; 2.将控制标识DDSCAPS_COMPLEX和DDSCAPS_FLIP加入DDSURFACEDESC2结构的特性描述字段ddsCaps.dwCaps上<br>&nbsp;&nbsp;&nbsp; 3.像通常一样创建主表面，然后从该主表面指针调用IDIRECTDRAWSURFACE7::GetAttachedSurface()，即可得到后备表面的指针，然后就像使用任何表面一样，随便改~<br>&nbsp;&nbsp;&nbsp;&nbsp; 示例：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ddsd.dwBackBufferCount = 1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_COMPLEX | DDSCAPS_FLIP;<br>三、关于页面切换<br>&nbsp;&nbsp;&nbsp; 后备缓冲绘制好了，需要切换的时候，从主表面指针调用Flip即可，此时需要保证主表面或者后备缓冲表面已经解锁。不能人家还在写数据你就要求它画出来。。总得把衣服穿好才能出来见人。。。</div>
<img src ="http://www.cppblog.com/cacar/aggbug/51160.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cacar/" target="_blank">cacar</a> 2008-05-26 17:57 <a href="http://www.cppblog.com/cacar/articles/51160.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>