question

jl-5360 avatar image
0 Votes"
jl-5360 asked jl-5360 answered

UpdateLayeredWindow failed in windows 7

Window Create Code:

 LPCTSTR lpszClassName = AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW, AfxGetApp()->LoadStandardCursor(IDC_ARROW),
         (HBRUSH)GetStockObject(TRANSPARENT), NULL);
    
     if(PngID)
         GdiplusHelper::LoadImageFromResource(m_bkImage, PngID, _T("PNG"));
     if(HoverPngID)
         GdiplusHelper::LoadImageFromResource(m_hoverImage, HoverPngID, _T("PNG"));
    
     m_Width = m_bkImage.GetWidth();
     m_Height = m_bkImage.GetHeight();
    
     BOOL ret = CWnd::Create(lpszClassName, NULL, WS_OVERLAPPED | WS_VISIBLE, CRect(x, y, x + m_Width, y + m_Height), pParentWnd, nID);
     ADD_EX_STYLE(GetSafeHwnd(), WS_EX_LAYERED);


Draw Code:
BLENDFUNCTION pb_ = { 0 };
pb_.AlphaFormat = AC_SRC_ALPHA;
pb_.BlendOp = AC_SRC_OVER;
pb_.BlendFlags = 0;
pb_.SourceConstantAlpha = 255;

 HDC dc = ::GetDC(GetSafeHwnd());
 HDC mem_dc_ = CreateCompatibleDC(dc);
 HBITMAP hBitmap = CreateCompatibleBitmap(dc, m_Width, m_Height);

 CPoint  pt_(0, 0);
 CSize   size_(m_Width, m_Height);

 ::SelectObject(mem_dc_, hBitmap);

 if (!m_bkImage.IsNull())
     m_bkImage.Draw(mem_dc_, 0, 0, m_Width, m_Height);

 if (m_isHover)
 {
     if (!m_hoverImage.IsNull())
         m_hoverImage.Draw(mem_dc_, 0, 0, m_Width, m_Height);
 }

    
 if (!::UpdateLayeredWindow(GetSafeHwnd(), dc, nullptr, &size_, mem_dc_, &pt_, 0, &pb_, ULW_ALPHA))
 {
     LOGE("UpdateLayeredWindow err:" << (int)GetLastError() );
     //BitBlt(dc, 0, 0, m_Width, m_Height, mem_dc_, 0, 0, SRCCOPY);
     goto cleanup;
 }

cleanup:
if(mem_dc_)
DeleteDC(mem_dc_);
if(hBitmap)
DeleteObject(hBitmap);
if(dc)
DeleteDC(dc);



In Win10:
96306-image.png


In Win7:
96290-image.png





plz help me

c++
image.png (324 B)
image.png (181 B)
5 |1600 characters needed characters left characters exceeded

Up to 10 attachments (including images) can be used with a maximum of 3.0 MiB each and 30.0 MiB total.

1 Answer

jl-5360 avatar image
0 Votes"
jl-5360 answered

And UpdateLayeredWindow err: 87

5 |1600 characters needed characters left characters exceeded

Up to 10 attachments (including images) can be used with a maximum of 3.0 MiB each and 30.0 MiB total.