⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_22075.htm

📁 一些关于vc的问答
💻 HTM
字号:
<p>
序号:22075 发表者:李 发表日期:2002-11-22 12:19:56
<br>主题:请教这样为什么不能获得透明位图效果呢?部分源代码如下:
<br>内容:CBitmapView::CBitmapView()<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;// TODO: add construction code here<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_imageList.Create(32,32,TRUE,3,1);<BR>&nbsp;&nbsp;&nbsp;&nbsp;AddBitmapToImageList(IDB_BITMAP1);<BR>&nbsp;&nbsp;&nbsp;&nbsp;AddBitmapToImageList(IDB_BITMAP2);<BR>&nbsp;&nbsp;&nbsp;&nbsp;AddBitmapToImageList(IDB_BITMAP3);<BR>}<BR><BR>void CBitmapView::OnDraw(CDC* pDC)<BR><BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;m_imageList.SetBkColor(RGB(0,255,0));<BR>&nbsp;&nbsp;&nbsp;&nbsp;CPoint pt(0,0);<BR>&nbsp;&nbsp;&nbsp;&nbsp;int x=0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;for(int i=0;i&lt;3;i++)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_imageList.Draw(pDC,i,pt,ILD_NORMAL);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pt.x+=50;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;TextOut(x,0,"xsgdsg");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x+=50;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;// TODO: add draw code for native data here<BR>}<BR><BR>BOOL CBitmapView::AddBitmapToImageList(UINT nResourceID)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;BOOL bReturn;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CBitmap bmp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;bReturn=bmp.LoadBitmap(nResourceID);<BR>&nbsp;&nbsp;&nbsp;&nbsp;if(bReturn!=FALSE)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int nReturn=m_imageList.Add(&amp;bmp,RGB(255,255,255));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bmp.DeleteObject();<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;return bReturn;<BR>}
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:徐景周 回复日期:2002-11-22 13:33:16
<br>内容:参看:<BR>http://www.codeproject.com/bitmap/trans_cimage.asp<BR><BR>http://www.codeproject.com/bitmap/transbitmapmask.asp<BR><BR>http://www.codeproject.com/useritems/cbitmask.asp<BR><BR>http://www.copathway.com/itbookreview/view_paper.asp?paper_id=65<BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:树爱兵 回复日期:2002-11-22 14:26:27
<br>内容:绘制透明位图<BR><BR>基本原理,也就是将一幅需<BR>要透明显示的位图(其透明色为已知),制作出二幅需要的位图A与B,其中A为除<BR>透明色外均填充为黑色,B为把透明色填充为黑色其余色不变,再用指定光栅操作<BR>将两幅位图合并,可形成透明位图。<BR>创建过程如下:<BR>1、使用透明色背景,将位图拷贝到内存屏蔽位图中。<BR>2、利用与白色相与不变色,与黑色相与成黑色的原理,将内存位图的的背景设置<BR>成黑色、前景设置成白色,并将屏蔽位图用与操作拷贝到此内存位图中。形成位图B。<BR>3、将显示设备背景设置为白色、前景设置成黑色,并将屏蔽位图用与操作拷贝到<BR>显示设备中。形成位图A。<BR>4、将内存位图用或操作拷贝到显示设备中。最终形成透明位图。<BR>//参数说明:<BR>//hDIB -位图句柄<BR>//pPal -位图调色板<BR>//xDest -显示位图的左上角x坐标<BR>//yDest -显示位图的左上角y坐标<BR>//colorTransparent -透明色<BR>void DrawTransparentBitmap( CDC *pDC, int nXDest, int nYDest,HGLOBAL hDIB, COLORREF colorTransparent, CPalette *pPal)<BR>BITMAPINFO &amp;bmInfo = *(LPBITMAPINFO)hDIB ;<BR>int nColors = bmInfo.bmiHeader.biClrUsed ? bmInfo.bmiHeader.biClrUsed :<BR>1 &lt;&lt; bmInfo.bmiHeader.biBitCount;<BR>int nWidth = bmInfo.bmiHeader.biWidth;<BR>int nHeight = bmInfo.bmiHeader.biHeight;<BR>LPVOID lpDIBBits = (LPVOID)(bmInfo.bmiColors + nColors);<BR>CDC memDC,maskDC;<BR>memDC.CreateCompatibleDC( pDC );<BR>CBitmap bmp;<BR>bmp.CreateCompatibleBitmap( pDC, nWidth, nHeight );<BR>CBitmap *pOldBitmap = memDC.SelectObject( &amp;bmp );<BR>if( pDC-&gt;GetDeviceCaps(RASTERCAPS) &amp; RC_PALETTE&amp;&amp;nColors&lt;256)<BR>CPalette *pOldMemPalette = memDC.SelectPalette(pPal, FALSE);<BR>memDC.RealizePalette();<BR>::SetDIBitsToDevice(memDC.m_hDC, 0, 0, nWidth, nHeight, 0, 0, 0,<BR>nHeight, lpDIBBits, (LPBITMAPINFO)hDIB, DIB_RGB_COLORS);<BR>maskDC.CreateCompatibleDC(pDC);<BR>CBitmap maskBitmap;<BR>maskBitmap.CreateBitmap( nWidth, nHeight, 1, 1, NULL );<BR>maskDC.SelectObject( &amp;maskBitmap );<BR>memDC.SetBkColor( colorTransparent );<BR>maskDC.BitBlt( 0, 0, nWidth, nHeight, &amp;memDC, 0, 0, SRCCOPY );<BR>memDC.SetBkColor(RGB(0,0,0));<BR>memDC.SetTextColor(RGB(255,255,255));<BR>memDC.BitBlt(0, 0, nWidth, nHeight, &amp;maskDC, 0, 0, SRCAND);<BR>pDC-&gt;SetBkColor(RGB(255,255,255));<BR>pDC-&gt;SetTextColor(RGB(0,0,0));<BR>pDC-&gt;BitBlt(nXDest, nYDest, nWidth, nHeight, &amp;maskDC, 0, 0, SRCAND);<BR> <BR>pDC-&gt;BitBlt(nXDest, nYDest, nWidth, nHeight, &amp;memDC,<BR>0, 0, SRCPAINT);<BR>memDC.SelectObject( pOldBitmap );<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -