Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вывод изображения в окне 
V
    Опции темы
Kirgston
Дата 5.12.2010, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 792
Регистрация: 24.12.2007

Репутация: нет
Всего: 2



Всем доброго времени суток! Собственно инетересуюсь как вывести изображение на чистом WinApi в окошко на том же чистом WinApi =). Для этого использую средства GDI + :

Код

Gdiplus::Image * m_pImage;
HDC hdc;

HRESULT Load(LPCWSTR szFile)
{
    // Create new Gdiplus::Image object
    m_pImage = new Gdiplus::Image(szFile);

    // Check for success
    if (Gdiplus::Ok == m_pImage->GetLastStatus())
        return S_OK;

    // Cleanup on failure
    delete m_pImage;
    return E_FAIL;
}

HRESULT DrawImg(HDC hdc, RECT& rcBounds)
{
    if (m_pImage)
    {
        // Create Gdiplus::Graphics object from HDC
        Gdiplus::Graphics graphics(hdc);
        // Create Gdiplus::Rect object from RECT
        Gdiplus::Rect rc(rcBounds.left, rcBounds.top, rcBounds.right, rcBounds.bottom);

        // Draw the image
        return Gdiplus::Ok == graphics.DrawImage(
            m_pImage,                        // [in] Gdiplus::Image object
            rc                                // [in] Position and dimensions
            ) ? S_OK : E_FAIL;
    }

    return E_UNEXPECTED;
}


и собственно вызов:

Код

                    hdc = GetDC(hWnd);
                    RECT rc;
                    rc.bottom = 20;
                    rc.left = 10;
                    rc.right = 20;
                    rc.top = 10;

                    Load(L"C:\\Users\\Алекс\\Desktop\\Screen(12_03-21_24)-0000.jpg");
                    DrawImg(hdc,rc);


Сам файл валидный. А у меня всё останавливается именно на строчке: 
Код

if (Gdiplus::Ok == m_pImage->GetLastStatus())


Потому что если не ошибаюсь то m_pImage == NULL. То есть создание GDI + рисунка не проходит. Какое может быть решение проблемы?
PM MAIL   Вверх
586
Дата 5.12.2010, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



Gdiplus::GdiplusStartup вызывал?
PM   Вверх
Kirgston
Дата 6.12.2010, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 792
Регистрация: 24.12.2007

Репутация: нет
Всего: 2



Цитата(586 @  5.12.2010,  20:22 Найти цитируемый пост)
Gdiplus::GdiplusStartup вызывал?

спасибо , нет , теперь всё понял =)

А не подскажите как удалить этот рисунок с экрана?
PM MAIL   Вверх
586
Дата 6.12.2010, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



Цитата(Kirgston @  6.12.2010,  21:31 Найти цитируемый пост)
А не подскажите как удалить этот рисунок с экрана? 

InvalidateRect
PM   Вверх
Kirgston
Дата 6.12.2010, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 792
Регистрация: 24.12.2007

Репутация: нет
Всего: 2



Да действительно всё оказалось достаточно просто (Вы меня даже опередили с постом  smile )

Обычный Инвалидейт Рект ничего не дал, пришлось еще чуток дополнить это (обычный не давал прорисовываться новому рисунку).
Код


        InvalidateRect(hWnd,&tRc,true);
        SendMessage(hWnd,WM_PAINT,0,0);
        SendMessage(hWnd,WM_NOTIFY,(WPARAM)hWnd,NULL);

PM MAIL   Вверх
586
Дата 6.12.2010, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



Цитата(Kirgston @  6.12.2010,  22:02 Найти цитируемый пост)
SendMessage(hWnd,WM_NOTIFY,(WPARAM)hWnd,NULL);

а это ещё зачем?

Цитата(Kirgston @  6.12.2010,  22:02 Найти цитируемый пост)
обычный не давал прорисовываться новому рисунку

Можно было просто закрасить область функцией FillRect или Rectangle.

И почему не отрисовываешь рисунок в обработчике сообщения WM_PAINT.



Это сообщение отредактировал(а) 586 - 6.12.2010, 22:17
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0561 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.