VC透掉背景色
2015-07-06 14:44
274 查看
//透掉背景色
//CBitmap m_bit;
//m_bit.LoadBitmap(strBmpPath);
//HBITMAP bBit = (HBITMAP)m_bit.m_hObject;
//if (GetObjectType(bBit) == OBJ_BITMAP)
//{
// CSize csBitmap = GetBitmapSize(bBit);
// m_Bitmap.Attach(bBit);
// CClientDC dc(this);
// SetupRegion(&dc,m_Bitmap,RGB(255,0,255));
// //调整到背景图片大小
// CSize size = GetImageSize(BmpMain);
// SetWindowPos(NULL,0,0,size.cx,size.cy,SWP_NOZORDER);
//}
HBITMAP LoadResImageBMP(LPCTSTR bmpName)
{
HBITMAP hBitmap = NULL;
int tries = 3;
//2009-12-05 by zhuhaiyan
do
{
hBitmap = (HBITMAP)LoadImage(
NULL,
GetResourcePath() + bmpName,
IMAGE_BITMAP,
0,
0,
(LR_CREATEDIBSECTION | LR_LOADFROMFILE)
);
} while (hBitmap == NULL && (tries--) > 0);
return hBitmap;
}
CSize GetBitmapSize(HBITMAP hBitmap)
{
if (hBitmap == NULL)
{
return CSize(0, 0);
}
PBITMAPINFO pBtimapInfo;
if (!GetBitmapHeaderInfo(hBitmap, pBtimapInfo))
{
return 0;
}
UINT nWidth = pBtimapInfo->bmiHeader.biWidth;
UINT nHeight = pBtimapInfo->bmiHeader.biHeight;
CSize csBitmap(nWidth, nHeight);
if (pBtimapInfo)
{
free(pBtimapInfo);
}
return csBitmap;
}
void SetupRegion(CDC *pDC, CBitmap &cBitmap, COLORREF TransColor)
{
CDC memDC;
//创建与传入DC兼容的临时DC
memDC.CreateCompatibleDC(pDC);
CBitmap *pOldMemBmp=NULL;
//将位图选入临时DC
pOldMemBmp=memDC.SelectObject(&cBitmap);
CRgn wndRgn;
//创建总的窗体区域,初始region为0
wndRgn.CreateRectRgn(0,0,0,0);
BITMAP bit;
cBitmap.GetBitmap (&bit);//取得位图参数,这里要用到位图的长和宽
int y;
for(y=0;y<=bit.bmHeight ;y++)
{
CRgn rgnTemp; //保存临时region
int iX = 0;
do
{
//跳过透明色找到下一个非透明色的点.
while (iX <= bit.bmWidth && memDC.GetPixel(iX, y) == TransColor)
iX++;
//记住这个起始点
int iLeftX = iX;
//寻找下个透明色的点
while (iX <= bit.bmWidth && memDC.GetPixel(iX, y) != TransColor)
++iX;
//创建一个包含起点与重点间高为1像素的临时“region”
rgnTemp.CreateRectRgn(iLeftX, y, iX, y+1);
//合并到主"region".
wndRgn.CombineRgn(&wndRgn, &rgnTemp, RGN_OR);
//删除临时"region",否则下次创建时和出错
rgnTemp.DeleteObject();
}while(iX <bit.bmWidth );
iX = 0;
}
if(pOldMemBmp)
memDC.SelectObject(pOldMemBmp);
CWnd * pWnd = pDC->GetWindow();
pWnd->SetWindowRgn(wndRgn,TRUE);
pWnd->SetForegroundWindow();
}
//CBitmap m_bit;
//m_bit.LoadBitmap(strBmpPath);
//HBITMAP bBit = (HBITMAP)m_bit.m_hObject;
//if (GetObjectType(bBit) == OBJ_BITMAP)
//{
// CSize csBitmap = GetBitmapSize(bBit);
// m_Bitmap.Attach(bBit);
// CClientDC dc(this);
// SetupRegion(&dc,m_Bitmap,RGB(255,0,255));
// //调整到背景图片大小
// CSize size = GetImageSize(BmpMain);
// SetWindowPos(NULL,0,0,size.cx,size.cy,SWP_NOZORDER);
//}
HBITMAP LoadResImageBMP(LPCTSTR bmpName)
{
HBITMAP hBitmap = NULL;
int tries = 3;
//2009-12-05 by zhuhaiyan
do
{
hBitmap = (HBITMAP)LoadImage(
NULL,
GetResourcePath() + bmpName,
IMAGE_BITMAP,
0,
0,
(LR_CREATEDIBSECTION | LR_LOADFROMFILE)
);
} while (hBitmap == NULL && (tries--) > 0);
return hBitmap;
}
CSize GetBitmapSize(HBITMAP hBitmap)
{
if (hBitmap == NULL)
{
return CSize(0, 0);
}
PBITMAPINFO pBtimapInfo;
if (!GetBitmapHeaderInfo(hBitmap, pBtimapInfo))
{
return 0;
}
UINT nWidth = pBtimapInfo->bmiHeader.biWidth;
UINT nHeight = pBtimapInfo->bmiHeader.biHeight;
CSize csBitmap(nWidth, nHeight);
if (pBtimapInfo)
{
free(pBtimapInfo);
}
return csBitmap;
}
void SetupRegion(CDC *pDC, CBitmap &cBitmap, COLORREF TransColor)
{
CDC memDC;
//创建与传入DC兼容的临时DC
memDC.CreateCompatibleDC(pDC);
CBitmap *pOldMemBmp=NULL;
//将位图选入临时DC
pOldMemBmp=memDC.SelectObject(&cBitmap);
CRgn wndRgn;
//创建总的窗体区域,初始region为0
wndRgn.CreateRectRgn(0,0,0,0);
BITMAP bit;
cBitmap.GetBitmap (&bit);//取得位图参数,这里要用到位图的长和宽
int y;
for(y=0;y<=bit.bmHeight ;y++)
{
CRgn rgnTemp; //保存临时region
int iX = 0;
do
{
//跳过透明色找到下一个非透明色的点.
while (iX <= bit.bmWidth && memDC.GetPixel(iX, y) == TransColor)
iX++;
//记住这个起始点
int iLeftX = iX;
//寻找下个透明色的点
while (iX <= bit.bmWidth && memDC.GetPixel(iX, y) != TransColor)
++iX;
//创建一个包含起点与重点间高为1像素的临时“region”
rgnTemp.CreateRectRgn(iLeftX, y, iX, y+1);
//合并到主"region".
wndRgn.CombineRgn(&wndRgn, &rgnTemp, RGN_OR);
//删除临时"region",否则下次创建时和出错
rgnTemp.DeleteObject();
}while(iX <bit.bmWidth );
iX = 0;
}
if(pOldMemBmp)
memDC.SelectObject(pOldMemBmp);
CWnd * pWnd = pDC->GetWindow();
pWnd->SetWindowRgn(wndRgn,TRUE);
pWnd->SetForegroundWindow();
}
相关文章推荐
- javascript中JSON对象使用
- me21n增强BADI:ME_PROCESS_PO_CUST之process_account
- C语言入门:03.关键字、标识符、注释
- POJ1185:火炮(减少国家)
- css3学习总结3--CSS3图像边框
- FastDFS的配置、部署与API使用解读(2)以字节方式上传文件的客户端代码
- 前后端分离的思考与实践(四)
- extjs 在IE8下TreePanel第一次无法显示问题
- 【Github教程】史上最全github使用方法:github入门到精通
- 有了struts1为何还要学struts2
- [LeetCode] Power of Two
- 使用cocopods时导入没有提示的解决方法
- FastDFS的配置、部署与API使用解读(1)Get Started with FastDFS
- Spring学习(7)--- @Required注解
- 电脑无故失去焦点,罪魁祸首是谁?终极解决办法
- 编译minicom出现问题:error: ‘BC’ undeclared (first use in this function)
- 零拷贝的同步问题
- kettle连接oracle出现Error connecting to database: (using class oracle.jdbc.driver.OracleDriver)
- request乱码
- iOS开发经验技巧之IOS中NSUserDefaults的用法(轻量级本地数据存储)