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;
}
BMP에 어떤 문제가 있습니까 : –