📄 20000727004.htm
字号:
xSrc,ySrc,dxSrc,dySrc,DDF_SAME_DRAW|DDF_SAME_HDC);<br>
DrawDibDraw(hdd,hdc,xDst,yDst,dxDst,dyDst,lpbi,lpBits,<br>
xSrc,ySrc,dxSrc,dySrc,DDF_SAME_DRAW|DDF_SAME_HDC);<br>
DrawDibDraw(hdd,hdc,xDst,yDst,dxDst,dyDst,lpbi,lpBits,<br>
xSrc,ySrc,dxSrc,dySrc,DDF_SAME_DRAW|DDF_SAME_HDC);<br>
ReleaseDC(hwnd,hdc);</p>
<p align="left"> <font lang="ZH-CN"> 调色板动画</font></p>
<p align="left"> <font lang="ZH-CN"> 下面用了</font>DrawDibRealize,DrawDibChangPalette<font lang="ZH-CN">和</font>DrawDibDraw<font lang="ZH-CN">函数演示调色板动画。</font></p>
<p align="left"> <font lang="ZH-CN"> 能够用</font>DrawDibBegin<font lang="ZH-CN">函数协同</font>DrawDibChangepalette<font lang="ZH-CN">函数改变一幅位图的颜色。首先,在调用</font>DrawDibBegin<font lang="ZH-CN">时指定</font>DDF_ANIMATE<font lang="ZH-CN">标志允许调色板改变;然后,用</font>DrawDibChangePalette<font lang="ZH-CN">函数从调色板入口设置颜色表的值。</font></p>
<p align="left"> <font lang="ZH-CN"> 例如,如果</font>lppe<font lang="ZH-CN">是一个包含新颜色的</font>PALETTEENTRY<font lang="ZH-CN">队列的地址,并且</font>lpbi<font lang="ZH-CN">是在</font>DrawDibBegin<font lang="ZH-CN">或</font>DrawDibDraw<font lang="ZH-CN">中使用的</font>LPBITMAPINFOHEADER<font lang="ZH-CN">结构,则后面的程序片段更新</font>DIB<font lang="ZH-CN">的颜色表。</font></p>
<p align="left">
hdc = GetDC(hwnd);<br>
DrawDibBegin(hdd,…,DDF_ANIMATE);<br>
DrawDibRealize(hdd,hdc,fBackground);<br>
DrawDibDraw(hdd,hdc,…,DDF_SAME_DRAW|DDF_SAME_HDC);<br>
//<font lang="ZH-CN">改变颜色调用</font><br>
DrawDibChangePalette(hdd,iStart,iLen,lppe);<br>
……<br>
ReleaseDC(hwnd,hdc);</p>
<p align="left"> <font lang="ZH-CN"> 下面给出一个实例的关键片段加以说明:(在</font>Visual
C++ 4.2 <font lang="ZH-CN">下</font>Windows95<font lang="ZH-CN">或</font>Windows
NT<font lang="ZH-CN">环境下通过。)</font></p>
<p align="left"> void CTestDrawDibView::OnDraw(CDC*
pDC)</p>
<p align="left"> <font lang="ZH-CN">
{</font></p>
<p align="left">
CTestDrawDibDoc* pDoc = GetDocument();//<font lang="ZH-CN">得到文档指针</font></p>
<p align="left">
ASSERT_VALID(pDoc);</p>
<p align="left">
// TODO: add draw code for native data here</p>
<p align="left">
m_DibMem = pDoc->m_Buf;//<font lang="ZH-CN">得到</font>DIB<font lang="ZH-CN">的内存</font></p>
<p align="left">
if (m_DibMem == NULL)</p>
<p align="left"> <font lang="ZH-CN">
{</font></p>
<p align="left">
//AfxMessageBox("Error in m_DibMem");</p>
<p align="left">
return;</p>
<p align="left"> <font lang="ZH-CN">
}</font></p>
<p align="left">
UINT offset = pDoc->m_Off; //<font lang="ZH-CN">得到</font>DIB<font lang="ZH-CN">数据的偏移</font></p>
<p align="left">
int xDst,yDst,dxDst,dyDst,xSrc,ySrc,dxSrc,dySrc;</p>
<p align="left">
LPBITMAPINFOHEADER lpbi;</p>
<p align="left">
LPVOID lpDibMem;</p>
<p align="left">
LPVOID lpbits=NULL;</p>
<p align="left">
// get the Windows width & height <font lang="ZH-CN">得到窗口的宽高</font></p>
<p align="left">
RECT rect;</p>
<p align="left">
GetClientRect(&rect);</p>
<p align="left">
xDst = yDst = 0;</p>
<p align="left">
dxDst = rect.right - rect.left;</p>
<p align="left">
dyDst = rect.bottom - rect.top;</p>
<p align="left">
// Get Dib info<font lang="ZH-CN">得到</font>DIB<font lang="ZH-CN">的信息</font></p>
<p align="left">
xSrc = ySrc =0;</p>
<p align="left">
lpDibMem = GlobalLock(m_DibMem);//<font lang="ZH-CN">锁定内存得到指针</font></p>
<p align="left">
lpbi = (LPBITMAPINFOHEADER)lpDibMem;//<font lang="ZH-CN">得到</font>DIB<font lang="ZH-CN">信息</font></p>
<p align="left">
dxSrc = lpbi->biWidth; </p>
<p align="left">
dySrc = lpbi->biHeight; </p>
<p align="left">
lpbits = (LPSTR)lpDibMem + offset - sizeof(BITMAPFILEHEADER);</p>
<p align="left">
// Draw Dib<font lang="ZH-CN">绘</font>DIB</p>
<p align="left">
HDC hdc = NULL;</p>
<p align="left">
hdc = pDC->m_hDC;</p>
<p align="left">
/*</p>
<p align="left">
// Using SetDIBToDevice<font lang="ZH-CN">使用</font>SetDIBToDevice<font lang="ZH-CN">函数为对照</font></p>
<p align="left">
int line = SetDIBitsToDevice(hdc,<br>
xDst,<br>
yDst,<br>
dxSrc,<br>
dySrc,<br>
xSrc,<br>
ySrc,<br>
0,<br>
dySrc,<br>
lpdib,//lpbits,<br>
(LPBITMAPINFO)lpbi,<br>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -