MFC 对话框透明效果

网上找的资料自己改了改,在这里记录和分享一下,主要是TransparentWnd函数。

在子类的OnShowWindow函数中调用 ShowWindowAlpha()

#pragma once
template<class T>
class CPopupDlgBaseT
{
    typedef BOOL (WINAPI *LPFNSETLAYEREDWINDOWATTRIBUTES)
        (HWND hwnd,COLORREF crKey,BYTE bAlpha,DWORD dwFlags);

public:
    void ShowWindowAlpha()
    {
        T* pT = static_cast<T*>(this);
        CWnd* pParentWnd = pT->GetParent();
     if (NULL != pParentWnd)
     {   CRect rc;   pParentWnd
->GetClientRect(&rc);   pParentWnd->ClientToScreen(&rc);   pT->MoveWindow(&rc);
    } TransparentWnd(pT
->m_hWnd, 150); } private: BOOL TransparentWnd(HWND hwnd, BYTE byAlpha) { long lStyle; HMODULE hModule; BOOL bRet; LPFNSETLAYEREDWINDOWATTRIBUTES lpSetLayeredWindowAttributes; if(FALSE == IsWindow(hwnd)) { MessageBox(hwnd, TEXT("窗口句柄无效!"), NULL, 0); return FALSE; } hModule = (HMODULE)LoadLibrary(TEXT("user32.dll")); if(hModule) { lpSetLayeredWindowAttributes = (LPFNSETLAYEREDWINDOWATTRIBUTES) GetProcAddress(hModule, "SetLayeredWindowAttributes"); if(!lpSetLayeredWindowAttributes) { MessageBox(hwnd, TEXT("未找到API SetLayeredWindowAttributes的地址!"), NULL, MB_OK); return FALSE; } } lStyle = GetWindowLong(hwnd, GWL_EXSTYLE); if(!lStyle) { MessageBox(hwnd, TEXT("获取窗口扩展样式失败!"), NULL, MB_OK); return FALSE; } lStyle = lStyle | WS_EX_LAYERED; bRet = SetWindowLong(hwnd, GWL_EXSTYLE, lStyle); if(!bRet) { MessageBox(hwnd, TEXT("设置窗口扩展样式失败!"), NULL, MB_OK); return FALSE; } bRet = lpSetLayeredWindowAttributes(hwnd, 0, byAlpha, LWA_ALPHA); if(!bRet) { MessageBox(hwnd, TEXT("设置窗口透明度失败!"), NULL, MB_OK); return FALSE; } ::RedrawWindow(hwnd, NULL, NULL, RDW_ERASE | RDW_INVALIDATE | RDW_FRAME | RDW_ALLCHILDREN); FreeLibrary(hModule); return TRUE; } };

 

转载于:https://www.cnblogs.com/john-h/p/6149744.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值