把位图中不需要部分用某一颜色表示,生成的窗体形状就是去把这种颜色的部分。
解决方案 »
- 急!MFC ODBC 打开记录集是捕捉到错误“检索记录集出错”?
- MFC 对话框 滚动条
- 如何读取ini中的多行数据
- 求反三角函数arcsin arccos arctan的源代码及如何查看库函数源代码?先谢了
- 我知道这可能有些弱,但我不得不问:怎么在一个基于对话框的MFC程序中捕捉WM_KEYDOWN消息?
- 为什么我在vc下用SetTimer,在Debug下没问题,但Release出来就进入Ontimer以后很容易出现应用程序错误??
- 怎样通过调用API函数CreateMutex,让我的应用程序只执行一次?
- 有人做过CAXA电子图板的VC++二次开发吗?
- error C2065: 'AfxLoadLibrary' : undeclared identifier
- 急!为什么用BitBlt显示不出来图象?
- 在VC中,双精度浮点数的精度是多少位?
- 在VC6.0中如何加入HtmlHelp.chm帮助文件?(50分)
HRGN SetRgn(HBITMAP hBitmap,COLORREF clrKey)
{
CBitmap bitmap ;
bitmap.Attach(hBitmap) ;
BITMAP bitmapInfo ;
bitmap.GetBitmap(&bitmapInfo) ;
int nRow = bitmapInfo.bmHeight ;
int nCol = bitmapInfo.bmWidth ;
CDC memDC ;
memDC.CreateCompatibleDC(NULL) ;
CBitmap* pOldBitmap = memDC.SelectObject(&bitmap) ;
CRgn rgn ;
rgn.CreateRectRgn(0,0,nCol,nRow) ;
for(int y = 0; y < nRow; y++)
{
for(int x = 0; x < nCol; x++)
{
COLORREF clrPixel = memDC.GetPixel(y,x) ;
if(clrPixel == clrKey)//去除关键色
{
CRgn rgnTemp ;
rgnTemp.CreateRectRgn(y,x,y+1,x+1) ;
rgn.CombineRgn(pRgn,&rgnTemp,RGN_XOR) ;
rgnTemp.DeleteObject() ;
}
}
}
memDC.SelectObject(pOldBitmap) ;
memDC.DeleteDC() ;
bitmap.Detach() ;
(HRGN)return rgn.Detach() ;
}根据生成的区域设置窗口
void SetWndRgn(HWND hWnd,HBITMAP hBitmap)
{
HRGN hRgn = SetRgn(hBitmap,clrKey)//其中clrKey为要mask掉的颜色值
SetWindowRgn(hRgn) ;
return ;
}