
int m_xScreen = GetSystemMetrics(SM_CXSCREEN)
int m_yScreen = GetSystemMetrics(SM_CYSCREEN)
SetWindowLong(GetSafeHwnd(),GWL_EXSTYLE,WS_EX_TOOLWINDOW)SetLayeredWindow(m_hWnd,80)SetWindowPos(&CWnd::wndTopMost,0,0,m_xScreen,m_yScreen,SWP_SHOWWINDOW)SetForegroundWindow()
void SetLayeredWindow(HWND m_hWnd,int nRate)
{HINSTANCE hInstif ((hInst = LoadLibrary(_T("USER32.dll"))) != NULL)
{
SetWindowLong(m_hWnd, GWL_EXSTYLE, GetWindowLong(m_hWnd, GWL_EXSTYLE) | WS_EX_LAYERED)typedef BOOL (WINAPI* lpfnSetTransparent)(HWND hWnd, COLORREF crKey, BYTE bAlpha, DWORD dwFlags)if (hInst){lpfnSetTransparent pFnSetTransparent = NULLpFnSetTransparent= (lpfnSetTransparent)GetProcAddress(hInst, "SetLayeredWindowAttributes")if (pFnSetTransparent)pFnSetTransparent(m_hWnd, 0, (255 * nRate) / 100, LWA_ALPHA)}
}
}
包含透明色的位图的绘制方法有多种,最简单的方法是调用现成的函数:TransparentBlt,也可以通过自己的代码实现类似TransparentBlt的功能,实现过程也有两种形式,一种是事先做一张掩码位图,另一种是动态生成掩码位图。本文将介绍动态生成掩码位图绘制具有透明区域位图的方法。一、TransparentBlt
函数的使用
TransparentBlt
函数在Windows98/Windows2000以上版本运行,系统中需要包含
Msimg32.dll,使用时可以链接
Msimg32.lib。
Windows98下的TransparentBlt会产生资源泄漏,所以不建议在WIN98下使用该函数。
TransparentBlt函数原型如下:
BOOL
TransparentBlt(HDC
hdcDest,
//
目标DCint
nXOriginDest,
//
目标X偏移int
nYOriginDest,
//
目标Y偏移int
nWidthDest,
//
目标宽度int
hHeightDest,
//
目标高度HDC
hdcSrc,
//
源DCint
nXOriginSrc,
//
源X起点int
nYOriginSrc,
//
源Y起点int
nWidthSrc,
//
源宽度int
nHeightSrc,
//
源高度UINT
crTransparent
//
透明色,COLORREF类型)使用示例:
CBitmap
FootballBMP
FootballBMP.LoadBitmap(IDB_FOOTBALLBMP)
CDC
ImageDC
ImageDC.CreateCompatibleDC(pDC)
CBitmap
*pOldImageBMP
=
ImageDC.SelectObject(&FootballBMP)
TransparentBlt(pDC->m_hDC,
0,
0,
218,
199,
ImageDC.m_hDC,
0,
0,
218,
199,
RGB(0,0,0xff))//RGB(0,0,0xff)改成你的背景颜色
ImageDC.SelectObject(pOldImageBMP)
在其父窗口中响应OnCtlColor然后添加如下代码
HBRUSH CMyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor)
if (nCtlColor==CTLCOLOR_STATIC)
{
pDC->SetTextColor(RGB(255,0,0))//字体颜色
pDC->SetBkMode(TRANSPARENT)// 背景透明
}
return hbr
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)