请教不是矩形图象在pic控件上显示的问题 我在DLG上显示了一张背景图. 上面又加了几个PIC控件,PIC要显示的图不是长方形的,例如有一张图是三个星星,我想让这个PIC控件除了这三个星星之外,其他部分跟背景图一样,请问应该怎么处理? 谢谢. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这样的话应该不能用PIC吧,直接用内存画了再显示,可能会涉及到图像叠加的一些问题。楼主看有看看这方面的知识。 需要设置控件的裁剪窗口,就是按照你图片的所取得内容进行相应窗体的裁剪,一般控件都有SetRgn方法,如果你的图片是星星那么图片上除星星以外的颜色就是掩码,通过获取像素值得到图片的裁剪区域,然后在设置这个裁剪区域到控件,这样你的控件就被裁减成与图片一样形状了。 根据图片创建regeion,在为这几个控件SetWindowRegeion pDC是设备句柄,rect是控件客户区,clrMask是图片掩码(即不需要显示的部分的颜色),rgn是裁剪后得到的裁剪区域,将rgn通过SetWindowRgn进行设置BOOL GetClipRgn(CDC* pDC, const CRect& rect, COLORREF clrMask, CRgn& rgn){ int x, y; for ( y = rect.top; y < rect.bottom; y++ ) { CRgn rgnTemp; x = rect.left; do { while ( x < rect.right && pDC->GetPixel(x, y) == clrMask ) ++x; int leftx = x; while ( x < rect.right && pDC->GetPixel(x, y) != clrMask ) ++x; rgnTemp.CreateRectRgn(leftx, y, x, y+1); rgn.CombineRgn(&rgn, &rgnTemp, RGN_OR); rgnTemp.DeleteObject(); } while (x < rect.right); } return TRUE;}图片的掩码就是不需要显示出来的颜色,比如一个星星主体的黄色,而你要显示黄色,那么其他颜色(不唯一)就是掩码,这时你要裁剪窗口就需要设置掩码为黄色,那么上面的代码就需要将第一while的等于改为不等于,第二while的不等于改为等于;如果其他颜色(唯一)即红色,那么红色就是掩码,这时你要裁剪窗口就需要设置掩码为红色,那么上面的代码就不需要改变。上面代码只是进行裁剪区域的获取,之前还需要你把图片加载进来才行,如果你要实现一个按钮的裁剪,就需要自己派生一个CButton类,而不能用原始的CButton进行处理。 ATL不支持MFC的工程,错误C1189,求解? 为什么Tree Control 无法响应TVN_SELCHANGED消息 如何通过编程获得当前系统的页面文件大小? 利用VC怎样去读取文件夹中的信息? 求outlookbar控件! COM组件与WEB怎么交互,参数怎么传递??? 一个比较简单的注册表的问题 任何删出工具拦上的按纽 如何通过Api函数实现windows的自动关闭系统功能? vs2010单文档工程判断显示接口的连接问题 WSARecvEx()的问题 中断调用
楼主看有看看这方面的知识。
BOOL GetClipRgn(CDC* pDC, const CRect& rect, COLORREF clrMask, CRgn& rgn)
{
int x, y;
for ( y = rect.top; y < rect.bottom; y++ )
{
CRgn rgnTemp;
x = rect.left;
do
{
while ( x < rect.right && pDC->GetPixel(x, y) == clrMask )
++x; int leftx = x; while ( x < rect.right && pDC->GetPixel(x, y) != clrMask )
++x; rgnTemp.CreateRectRgn(leftx, y, x, y+1); rgn.CombineRgn(&rgn, &rgnTemp, RGN_OR); rgnTemp.DeleteObject(); } while (x < rect.right);
} return TRUE;
}
图片的掩码就是不需要显示出来的颜色,比如一个星星主体的黄色,而你要显示黄色,那么其他颜色(不唯一)就是掩码,这时你要裁剪窗口就需要设置掩码为黄色,那么上面的代码就需要将第一while的等于改为不等于,第二while的不等于改为等于;如果其他颜色(唯一)即红色,那么红色就是掩码,这时你要裁剪窗口就需要设置掩码为红色,那么上面的代码就不需要改变。
上面代码只是进行裁剪区域的获取,之前还需要你把图片加载进来才行,如果你要实现一个按钮的裁剪,就需要自己派生一个CButton类,而不能用原始的CButton进行处理。