Программная настройка PNG для Picture Control в Win32 API - PullRequest
6 голосов
/ 07 октября 2009

Я использую Visual Studio 2008, у меня загружен файл PNG в представлении ресурсов, ему присвоено IDB_BANG_PNG.

Picture Control называется IDC_STATIC15.

У меня проблемы с загрузкой PNG в систему управления изображением.

LRESULT CALLBACK DialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{

// Way of loading a bmp with a mask perhaps?  Or a PNG file programatically?

static HBRUSH hBrushStatic;
HBITMAP hBmp = LoadBitmap(hDlg,MAKEINTRESOURCE(IDB_BANG_PNG));

switch(message)
{
case WM_INITDIALOG:     
    CheckDlgButton(hDlg, IDC_CHECK, FALSE);
    EnableWindow(GetDlgItem(hDlg, IDOK), FALSE);
    // Bitmap version is IDB_BANG, PNG is at IDB_BANG_PNG
    // IDC_STATIC15 is the picture frame
    HWND item = GetDlgItem(hDlg,IDC_STATIC15);
    SendMessage(item,STM_SETIMAGE,IMAGE_BITMAP,(LPARAM)hBmp);   
    return TRUE;

// .... snip

Я довольно наивен, когда дело доходит до разработки Win32 / GUI, я делаю быстрый проект и застреваю, любая помощь приветствуется.

Ответы [ 4 ]

4 голосов
/ 08 октября 2009

Это работает с использованием GDI + и класса точечного рисунка :

Bitmap oBmp(L"D:\\test.png");
HBITMAP hBmp;
oBmp.GetHBITMAP(0, &hBmp);
SendMessage(item,STM_SETIMAGE,IMAGE_BITMAP,(LPARAM)hBmp);

Некоторые предупреждения. Вашему элементу управления требуется стиль SS_BITMAP. Не забудьте включить gdiplus.h и его библиотеку. Вам нужно инициализировать (GdiplusStartup) и выключить GDI +. Освобождение всех системных ресурсов на вас.

1 голос
/ 09 декабря 2009

Я не думаю, что LoadBitmap или любая другая простая функция GDI (например, LoadImage) загрузит PNG.

Вы можете сохранить свой ресурс в 32-битной BMP с помощью инструмента редактирования изображений, а затем использовать LoadImage с LR_CREATEDIBSECTION.

Или вы можете использовать библиотеку, которая будет загружать файл PNG в DIBSECTION. GDI + будет загружать PNG и JPG в дополнение к BMP.

Библиотеки автоматизации OLE также имеют интерфейс IPicture, который можно создавать с различными типами изображений, а затем получать базовый DIBSECTION. Это неудобно в использовании, особенно если вы не знакомы с COM. См. OleLoadPicture для начальной точки.

0 голосов
/ 08 декабря 2009

Вы проверили библиотеку DevIL / OpenIL? Он соответствует стилю именования функций в стиле OpenGL и написан на хорошем языке С.

Я использовал в прошлом, успешно. Он также очень портативный.

Проверьте это здесь: http://openil.sourceforge.net/features.php

0 голосов
/ 07 октября 2009

Лично я использую CPictureEx класс. Я думаю, что он не поддерживает PNG, но BMP, JPEG и анимированные GIF.

Я также использую Cairo графику для специального рендеринга. Каир поддерживает формат PNG.
Конечно, использовать Каир немного сложнее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...