MFC设置透明窗口

MFC设置透明窗口,第1张

得到屏幕大小,把窗口设置为全屛

      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)}

    }

}

if(nCtlColor!= CTLCOLOR_DLG) //如果是静态标签 在这里, CTLCOLOR_DLG应该是用控件ID,并且对静态框,不能用默认ID的IDC_STATIC,必须改名。 另外,不是所有控件都可以用这种方式改背景透明,静态框、编辑框、简单列表框可以,按钮不行。

包含透明色的位图的绘制方法有多种,最简单的方法是调用现成的函数: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)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/6367096.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-21
下一篇 2023-03-21

发表评论

登录后才能评论

评论列表(0条)

保存