在这里说一下,百度查这个函数的时候,真是坑!一个个尽是扯淡,也就几个是自己做的实例,是自己写的程序里的一个片段代码。也说明这个人是真的用上了这个函数。可是有的人直接就是贴百度百科里的东西,尽是些理论——扯淡!误人子弟!在这里,我鄙视那些人。说完了自己查资料时候的感受,下面进入正题!
对于剪切区呢,请参考本站大神codexia《GDI中的剪切区域的设置和使用代码详解》写的系列文章。
我们一旦定义创建了一个区域对象,并规定了范围的话,相当于取代了原本的对话框客户区,那么,我们现在如果在进行绘图操作,就是在我们的剪切区上进行了。这就是我要说的重点,也是本文的程序的中心点。
下面我们看个代码:
CDC *pDC = GetDC();
if(m_hBmp != NULL)
{
//添加的代码:
HRGN c;
HRGN r1;
c = CreateRectRgn(108, 100, 155, 131);
r1 = CreateEllipticRgn(148, 108, 100+15 + 48, 100+15 + 8);
CombineRgn(c, c, r1, RGN_OR);
SelectClipRgn(pDC->GetSafeHdc(),c);
//到此为止
CBitmap bmp; //定义一个位图对象
bmp.Attach(m_hBmp); //将位图句柄关联到位图对象上
CDC memDC; //定义一个设备上下文
memDC.CreateCompatibleDC(pDC); //创建兼容的设备上下文
memDC.SelectObject(&bmp); //选中位图对象
BITMAP BitInfo; //定义位图结构
bmp.GetBitmap(&BitInfo); //获取位图信息
int x = BitInfo.bmWidth; //获取位图宽度
int y = BitInfo.bmHeight; //获取位图高度
pDC->BitBlt(10, 50, x, y, &memDC, 0, 0, SRCCOPY);//向窗口中绘制位图
bmp.Detach(); //分离位图句柄
memDC.DeleteDC(); //释放设备上下文对象
}
这段代码是《学习心得之八------实现从磁盘读入图片文件》只是添加了几句代码而已!下面是实现结果:
上图是没有添加代码的实现结果!对比下不同......
那么我问你,如何在自定义的按钮上铺上图片呢?参考本文,自己实现看看!