2013-02-06 1 views
1

CToolBarCtrl http://msdn.microsoft.com/en-us/library/tf5d6ca2(v=vs.80).aspx 클래스를 사용하여 툴바에 png 이미지를 표시하려는 기존 WTL 응용 프로그램이 있습니다. 현재 BMP 이미지는 도구 모음에 표시됩니다 (LoadToolBar 함수를 호출하고 도구 모음을 리소스에서 사용할 수 있도록 설정).WTL 응용 프로그램의 툴바에 PNG 이미지를 표시하는 방법

PNG 이미지를 사용하도록 수정하고 싶습니다. CTngBarCtrl 클래스를 사용하여 PNG 이미지를로드하려고 시도했지만 헛되지 않았습니다. 그것을 할 수있는 방법이 있습니까?

#include <gdiplus.h> 
#pragma comment(lib, "gdiplus.lib") 


ATLINLINE HBITMAP AtlLoadGdiplusImage(ATL::_U_STRINGorID bitmap, ATL::_U_STRINGorID type = (UINT) 0) 
{ 
    USES_CONVERSION; 
    static bool s_bInitied = false; 
    if(!s_bInitied) { 
     s_bInitied = true; 
     Gdiplus::GdiplusStartupInput gsi; 
     Gdiplus::GdiplusStartupOutput gso; 
     ULONG uToken = 0; 
     Gdiplus::GdiplusStartup(&uToken, &gsi, &gso); 
    } 
    Gdiplus::Bitmap* pBitmap = NULL; 
    if(HIWORD(bitmap.m_lpstr) != NULL) { 
     // Load from filename 
     pBitmap = new Gdiplus::Bitmap(T2CW(bitmap.m_lpstr)); 
    } 
    else if(type.m_lpstr != NULL && type.m_lpstr != RT_BITMAP) { 
     // Loading PNG, JPG resources etc 
     WTL::CResource res; 
     if(!res.Load(type, bitmap)) return NULL; 
     DWORD dwSize = res.GetSize(); 
     HANDLE hMemory = ::GlobalAlloc(GMEM_MOVEABLE, dwSize); 
     if(hMemory == NULL) return NULL; 
     ::memcpy(::GlobalLock(hMemory), res.Lock(), dwSize); 
     ::GlobalUnlock(hMemory); 
     IStream* pStream = NULL; 
     if(FAILED(::CreateStreamOnHGlobal(hMemory, TRUE, &pStream))) { 
     ::GlobalFree(hMemory); 
     return FALSE; 
     } 
     pBitmap = new Gdiplus::Bitmap(pStream); 
     pStream->Release(); 
    } 
    else { 
     // This only loads BMP resources 
     pBitmap = new Gdiplus::Bitmap(_Module.GetResourceInstance(), (LPCWSTR) (UINT) bitmap.m_lpstr); 
    } 
    if(pBitmap == NULL) return NULL; 
    HBITMAP hBitmap = NULL; 
    pBitmap->GetHBITMAP(NULL, &hBitmap); 
    delete pBitmap; 
    return hBitmap; 
} 
+1

BMP에 어떤 문제가 있습니까 : –

답변

1

Here

는 PNG가 HBITMAP로 변환의 예입니다? 특히 이미지를 마운트하려는 PNG에 대한 지원이없는 경우 특히 그렇습니다. 또는 PNG를로드하고 메모리로 변환 한 다음 비트 맵으로 도구 모음에 전달할 수 있습니다.
관련 문제