Форум программистов, компьютерный форум CyberForum.ru

Исчезает всё нарисованное на gdi+ - C++

Восстановить пароль Регистрация
 
kveigs
16 / 16 / 2
Регистрация: 20.03.2010
Сообщений: 85
28.02.2012, 22:08     Исчезает всё нарисованное на gdi+ #1
Доброго времени суток!

Пишу подобие своего gui на gdi+.. Всё бы хорошо, но через некоторое время (около минуты), исчезает всё нарисованное.. и никакой Invalidate не помогает(( Что же делать?? Может где-то я не освобождаю ресурсы?? другого объяснения найти не могу(

После каждого движения мышкой проверяю положения курсора, и если он попал в кнопку, то отрисовываю картинку с помощью ImageDraw.. Ещё там всё-время отображаю изображение с веб-камеры.. Только вот его я рисую с помощью BitBtl и оно не куда не исчезает...

Подскажите с чем может быть связана моя проблема?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Xind
275 / 148 / 7
Регистрация: 05.11.2011
Сообщений: 425
Записей в блоге: 1
28.02.2012, 22:11     Исчезает всё нарисованное на gdi+ #2
kveigs, нарисованное мышкой вы наверное нигде не фиксируете (сохраняете введенные данные). Программа нарисует и забудет
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
28.02.2012, 22:13     Исчезает всё нарисованное на gdi+ #3
код в студию
kveigs
16 / 16 / 2
Регистрация: 20.03.2010
Сообщений: 85
28.02.2012, 22:29  [ТС]     Исчезает всё нарисованное на gdi+ #4
Спасибо всем. Уже всё работает норм - отрисовываю и кнопочки свои теперь с помощью BitBlt
вот код, может быть кому-нибудь пригодится
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
//рисует изображение с полупрозрачностью
void DrawWithAlpha(Bitmap* bitmap, Graphics* g, int x, int y, int width, int height, float alpha)
{
    // Initialize the color matrix.
    // Notice the value 0.8 in row 4, column 4.
    ColorMatrix colorMatrix = {1.0f, 0.0f, 0.0f, 0.0f, 0.0f,
                           0.0f, 1.0f, 0.0f, 0.0f, 0.0f,
                           0.0f, 0.0f, 1.0f, 0.0f, 0.0f,
                           0.0f, 0.0f, 0.0f, alpha, 0.0f,
                           0.0f, 0.0f, 0.0f, 0.0f, 1.0f};
    // Create an ImageAttributes object and set its color matrix.
    ImageAttributes imageAtt;
    imageAtt.SetColorMatrix(&colorMatrix, ColorMatrixFlagsDefault,
       ColorAdjustTypeBitmap);
    // Now draw the semitransparent bitmap image.
    g->DrawImage(
       bitmap, 
       Rect(0, 0, width, height),  // Destination rectangle
       x,                             // Source rectangle X 
       y,                             // Source rectangle Y
       width,                        // Source rectangle width
       height,                       // Source rectangle height
       UnitPixel, 
       &imageAtt);
}
 
bool DrawImageFast(HDC hdc, HBITMAP hBmp, Rect rect, float alpha)
{
    HDC     hMemDC1;
    HBITMAP hOldBitmap;
    
    hMemDC1 = CreateCompatibleDC(hdc);
    Bitmap bit(hBmp,0);
 
    if (hMemDC1){
       // рисуем все что требуется
       hOldBitmap = (HBITMAP)SelectObject(hMemDC1, hBmp);
       Graphics g2(hMemDC1);
       DrawWithAlpha(&bit, &g2, rect.X, rect.Y, rect.Width, rect.Height, alpha);
       // копируем биты
       BitBlt(hdc, rect.X, rect.Y, rect.Width, rect.Height, hMemDC1, 0, 0, SRCCOPY);
       // возвращаем старый bitmap
       SelectObject(hMemDC1, hOldBitmap);
       // освобождаем контекст
       DeleteDC(hMemDC1);
       DeleteObject(hOldBitmap);
    }
    else
    {
       return FALSE;
    }
    return TRUE;
}
p.s. Красота требует жертв!)
Yandex
Объявления
28.02.2012, 22:29     Исчезает всё нарисованное на gdi+
Ответ Создать тему
Опции темы

Текущее время: 17:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru