Như bạn đã phát hiện, ::LoadBitmap
(và mới hơn ::LoadImage
) chỉ xử lý .bmp
s. Đến nay, giải pháp đơn giản nhất là chuyển đổi hình ảnh của bạn thành .bmp
.
Nếu hình ảnh có độ trong suốt, nó có thể được chuyển đổi thành bitmap ARGB 32 bit (đây là công cụ có tên là AlphaConv có thể chuyển đổi nó). Sau đó tải hình ảnh bằng cách sử dụng phương thức CImage
lớp học LoadFromResource
. Vượt qua CImage
đến m_staticLogo.SetBitmap()
.
Nhưng nếu bạn thực sự cần nó là .png
, có thể thực hiện được.
Phương pháp 1 (cách dễ dàng hơn): Tải .png
từ tệp bằng cách sử dụng CImage::Load
. Vượt qua CImage
đến m_staticLogo.SetBitmap()
.
Cách 2 (cách khó khăn hơn): Load .png
từ một nguồn tài nguyên bằng cách tải các tài nguyên vào một COM IStream
và sử dụng CImage::Load
. (LƯU Ý: CImage::LoadFromResource
có vẻ hấp dẫn nhưng sẽ không hoạt động với đồ họa .png
). Để nhận tài nguyên vào COM IStream
, hãy xem this Codeproject article. Lưu ý bài viết hoạt động với Gdiplus::Bitmap
nhưng phần quan trọng là làm thế nào để tạo ra các IStream
, mà bạn sẽ có thể thích ứng cho CImage
. Cuối cùng, chuyển số CImage
đến m_staticLogo.SetBitmap()
.
Chỉnh sửa: Cập nhật để sử dụng CImage
, dễ hơn Gdiplus::Bitmap
.
Bản sao của http://stackoverflow.com/questions/3005685/ – ulatekh