Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.65/40: Рейтинг темы: голосов - 40, средняя оценка - 4.65
0 / 0 / 0
Регистрация: 03.11.2014
Сообщений: 47
1

Моргание экрана при перерисовке

07.12.2014, 00:38. Показов 8076. Ответов 24
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Ребята, может кто знает, как убрать моргание экрана при перерисовке, пользуюсь функцией InvalidateRect(), моргает не всегда, но бывает. Заранее спасибо
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.12.2014, 00:38
Ответы с готовыми решениями:

Мерцание при перерисовке окна
Я хочу заменить одно из дочерних окон Outlook своим. Делаю это так: отлавливаю дескрипторы, мое...

Не сохраняет цвет при перерисовке через bitmap
Не буду первой, но прощу помощи. Банально пробуем рисовать квадрат в буфер и обратно на экран....

Моргание экрана при логине
Запускаю компьютер - нужно ввести пароль(начинает моргать экран) все ввожу правильно и жму enter....

Анимация в dos - реализовать очистку экрана при перерисовке
подскажите пожалуйста чайнику, я написал код, сосуд мой двигается, но не стирается и поэтому...

24
Модератор
Эксперт по электронике
8946 / 6712 / 921
Регистрация: 14.02.2011
Сообщений: 23,686
07.12.2014, 00:39 2
двойная буферизация
0
0 / 0 / 0
Регистрация: 03.11.2014
Сообщений: 47
07.12.2014, 12:30  [ТС] 3
ValeryS, а не подскажете, как она реализовывается?
0
Модератор
Эксперт по электронике
8946 / 6712 / 921
Регистрация: 14.02.2011
Сообщений: 23,686
07.12.2014, 13:05 4
Цитата Сообщение от kalter14i77 Посмотреть сообщение
как она реализовывается?
очень просто
1 создается в памяти контекст совместимый с экраным
2 в нем рисуется что надо
3 потом копируется при помоши BitBlt
0
1 / 1 / 0
Регистрация: 10.04.2011
Сообщений: 30
07.12.2014, 17:35 5
C++
1
2
InvalidateRect(hwnd, NULL, true);             
UpdateWindow(hwnd)
Обновить экран еще разок нужно

Добавлено через 12 секунд
kalter14i77,
0
0 / 0 / 0
Регистрация: 03.11.2014
Сообщений: 47
07.12.2014, 17:47  [ТС] 6
ValeryS, Это нельзя назвать двойной буферизацией?
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
hdc = BeginPaint(hwnd, &ps);
 
       hmdc = CreateCompatibleDC(hdc);
       SelectObject(hmdc, hFon);
       GetObject(hFon, sizeof(bm), (LPSTR) &bm);
       BitBlt(hdc, 0, 0, bm.bmWidth, bm.bmHeight, hmdc, 0, 0, SRCCOPY);
       DeleteDC(hmdc);
       
       hmdc = CreateCompatibleDC(hdc);
       SelectObject(hmdc, hBlackChip);
       GetObject(hBlackChip, sizeof(bm), (LPSTR) &bm);
       BitBlt(hdc, 50, 638, bm.bmWidth, bm.bmHeight, hmdc, 0, 0, SRCCOPY);
       DeleteDC(hmdc);
 
       hmdc = CreateCompatibleDC(hdc);
       SelectObject(hmdc, hBlueChip);
       GetObject(hBlueChip, sizeof(bm), (LPSTR) &bm);
       BitBlt(hdc, 150, 638, bm.bmWidth, bm.bmHeight, hmdc, 0, 0, SRCCOPY);
       DeleteDC(hmdc);
 
       hmdc = CreateCompatibleDC(hdc);
       SelectObject(hmdc, hWhiteChip);
       GetObject(hWhiteChip, sizeof(bm), (LPSTR) &bm);
       BitBlt(hdc, 250, 638, bm.bmWidth, bm.bmHeight, hmdc, 0, 0, SRCCOPY);
       DeleteDC(hmdc);
 
       hmdc = CreateCompatibleDC(hdc);
       SelectObject(hmdc, hRedChip);
       GetObject(hRedChip, sizeof(bm), (LPSTR) &bm);
       BitBlt(hdc, 350, 638, bm.bmWidth, bm.bmHeight, hmdc, 0, 0, SRCCOPY);
       DeleteDC(hmdc);
 
       hmdc = CreateCompatibleDC(hdc);
       SelectObject(hmdc, hClearChip);
       GetObject(hClearChip, sizeof(bm), (LPSTR) &bm);
       BitBlt(hdc, 550, 638, bm.bmWidth, bm.bmHeight, hmdc, 0, 0, SRCCOPY);
       DeleteDC(hmdc);
 
       hmdc = CreateCompatibleDC(hdc);
       SelectObject(hmdc, hButton);
       GetObject(hButton, sizeof(bm), (LPSTR) &bm);
       BitBlt(hdc, 700, 628, bm.bmWidth, bm.bmHeight, hmdc, 0, 0, SRCCOPY);
       DeleteDC(hmdc);
 
       /*for(int i = 0; i < nn; i++)
        {
          if((arr + i)->numb == 0)
          {
            if((arr + i)->laststavka == 1)
            {
              hmdc = CreateCompatibleDC(hdc);
              DrawIcon(hmdc, 111, 267, hBlackIcon);
              DeleteDC(hmdc);
            }
            if((arr + i)->laststavka == 5)
            {
              hmdc = CreateCompatibleDC(hdc);
              DrawIcon(hmdc, 111, 267, hBlueIcon);
              DeleteDC(hmdc);
            }
            if((arr + i)->laststavka == 25)
            {
              hmdc = CreateCompatibleDC(hdc);
              DrawIcon(hmdc, 111, 267, hWhiteIcon);
              DeleteDC(hmdc);
            }
            if((arr + i)->laststavka == 100)
            {
              hmdc = CreateCompatibleDC(hdc);
              DrawIcon(hmdc, 111, 267, hRedIcon);
              DeleteDC(hmdc);
            }
          }
        }*/
 
       static LOGFONT lf; 
       lf.lfCharSet = DEFAULT_CHARSET; 
       lf.lfPitchAndFamily = DEFAULT_PITCH; 
       strcpy(lf.lfFaceName, "Times New Roman"); 
       lf.lfHeight = 20; 
       lf.lfWidth = 10; 
       lf.lfWeight = 40; 
       lf.lfEscapement = 0;
       HFONT hFont = CreateFontIndirect(&lf);
       SelectObject(hdc, hFont); 
       SetTextColor(hdc, RGB(255, 0, 0));
       SetBkColor(hdc, RGB(0, 108, 0));
       TextOut(hdc, 850, 50, "Профиль:", strlen("Профиль:"));
       TextOut(hdc, 850, 200, "Стек:", strlen("Стек:"));
       TextOut(hdc, 850, 350, "Ставка:", strlen("Ставка:"));
       TextOut(hdc, 850, 500, "Выигрыш:", strlen("Выигрыш:"));
       TextOut(hdc, 523, 608, "Сброс ставки", strlen("Сброс ставки"));
       SetTextColor(hdc, RGB(0, 0, 0));
       TextOut(hdc, 850, 90, namebuf, strlen(namebuf));
       _itoa(stak, stekbuf, 10);
       TextOut(hdc, 850, 240, stekbuf, strlen(stekbuf));
       _itoa(stavka, stavkabuf, 10);
       TextOut(hdc, 850, 390, stavkabuf, strlen(stavkabuf));
       _itoa(kolwin, winbuf, 10);
       TextOut(hdc, 850, 540, winbuf, strlen(winbuf));
       SetBkColor(hdc, RGB(255, 255, 255));
       TextOut(hdc, 110, 45, boerisay, strlen(boerisay));
       TextOut(hdc, 460, 45, negreanusay, strlen(negreanusay));
       TextOut(hdc, 278, 668, "25", strlen("25"));
       SetBkColor(hdc, RGB(140, 0, 0));
       TextOut(hdc, 371, 668, "100", strlen("100"));
       SetTextColor(hdc, RGB(255, 255, 255));
       SetBkColor(hdc, RGB(0, 45, 100));
       TextOut(hdc, 184, 668, "5", strlen("5"));
       SetBkColor(hdc, RGB(0, 0, 0));
       TextOut(hdc, 85, 668, "1", strlen("1"));
       DeleteObject(hFont);
     ValidateRect(hwnd, NULL);
       EndPaint(hwnd, &ps);
       return 0;
0
Модератор
Эксперт по электронике
8946 / 6712 / 921
Регистрация: 14.02.2011
Сообщений: 23,686
07.12.2014, 18:01 7
Цитата Сообщение от kalter14i77 Посмотреть сообщение
Это нельзя назвать двойной буферизацией?
с большой натяжкой
принцип то правильный, но исполнение
создаешь контекст
Цитата Сообщение от kalter14i77 Посмотреть сообщение
hmdc = CreateCompatibleDC(hdc);
в этом контексте нужно еще создать битмап, чтобы было где рисовать
потом рисуешь в этом контексте
Цитата Сообщение от kalter14i77 Посмотреть сообщение
TextOut(hdc, 850, 50, "Профиль:", strlen("Профиль:"));
C
1
TextOut(hmdc, 850, 50, "Профиль:", strlen("Профиль:"));
и потом чохом все копируешь на экран
вот здесь обсуждалось
https://www.cyberforum.ru/cpp-... 00041.html
правда там MFC, но принцип тот же
0
0 / 0 / 0
Регистрация: 03.11.2014
Сообщений: 47
07.12.2014, 18:05  [ТС] 8
Катеринк@, неее, это не поможет, у меня в конце WM_PAINT стоит ValidateRect(), он и так обновляет экран
0
Модератор
Эксперт по электронике
8946 / 6712 / 921
Регистрация: 14.02.2011
Сообщений: 23,686
07.12.2014, 18:11 9
вот еще
Двойная буферизация и WIN32 (GDI).
Прорисовка движущегося объекта
0
0 / 0 / 0
Регистрация: 03.11.2014
Сообщений: 47
07.12.2014, 18:49  [ТС] 10
ValeryS, спасибо большое, сейчас буду пробовать

Добавлено через 30 минут
ValeryS, Вот что попробовал написать, пока с одним битмапом, но его не нарисовало, где я ошибся?
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
HDC hdc, hmdc, hmdc2;
       PAINTSTRUCT ps;
       BITMAP bm;
       HBITMAP hFon = LoadBitmap(hInstan, "GLAVN_PIC");
hdc = BeginPaint(hwnd, &ps);
 
       hmdc = CreateCompatibleDC(hdc);
       hmdc2 = CreateCompatibleDC(hmdc);
       HBITMAP hGlvFon = CreateCompatibleBitmap(hdc, bm.bmWidth, bm.bmHeight);
       SelectObject(hmdc2, hFon);
       GetObject(hFon, sizeof(bm), (LPSTR) &bm);
       BitBlt(hmdc, 0, 0, bm.bmWidth, bm.bmHeight, hmdc2, 0, 0, SRCCOPY);
       DeleteDC(hmdc2);
       BitBlt(hdc, 0, 0, bm.bmWidth, bm.bmHeight, hmdc, 0, 0, SRCCOPY);
       DeleteObject(hGlvFon);
       DeleteDC(hmdc);
 
ValidateRect(hwnd, NULL);  
       EndPaint(hwnd, &ps);
0
Модератор
Эксперт по электронике
8946 / 6712 / 921
Регистрация: 14.02.2011
Сообщений: 23,686
07.12.2014, 18:55 11
Цитата Сообщение от kalter14i77 Посмотреть сообщение
ValidateRect(hwnd, NULL);
это зачем??
попробуй сначала в hmdc нарисовать что то, допустим прямоугольник
в двойной буферизации есть тонкости, которые пока сам не пощупаешь, не поймешь
у меня сейчас нет компилятора, чтобы накидать тебе рабочий пример

Добавлено через 53 секунды
Цитата Сообщение от kalter14i77 Посмотреть сообщение
HBITMAP hGlvFon
вот это еще нужно выбрать в контексте рисования, SelectObject
0
0 / 0 / 0
Регистрация: 03.11.2014
Сообщений: 47
07.12.2014, 20:22  [ТС] 12
ValeryS, в самом hmdc и картинки неплохо рисуются) а вот с hmdc2 перебросить в hmdc, а потом с hmdc перебросить в hdc, вот это проблема. Возможно я слабо понимаю как это происходит, но насколько я понял это через bitblt() делается, но всё равно не получается вывести

Добавлено через 53 минуты
Вот, так вывело картинку, это правильная реализация?
C
1
2
3
4
5
6
7
8
hmdc = CreateCompatibleDC(hdc);
       GetObject(hFon, sizeof(bm), (LPSTR) &bm);
       HBITMAP hGlFon = CreateCompatibleBitmap(hdc, bm.bmWidth, bm.bmHeight);
       hGlFon = hFon;
       SelectObject(hmdc, hGlFon);
       BitBlt(hdc, 0, 0, bm.bmWidth, bm.bmHeight, hmdc, 0, 0, SRCCOPY);
       DeleteObject(hGlFon);
       DeleteDC(hmdc);
0
Модератор
Эксперт по электронике
8946 / 6712 / 921
Регистрация: 14.02.2011
Сообщений: 23,686
07.12.2014, 20:38 13
Цитата Сообщение от kalter14i77 Посмотреть сообщение
это правильная реализация?
почти что
Цитата Сообщение от kalter14i77 Посмотреть сообщение
GetObject(hFon, sizeof(bm), (LPSTR) &bm);
зачем каждый раз вызывать?
вызови один раз при создании окна
Цитата Сообщение от kalter14i77 Посмотреть сообщение
SelectObject(hmdc, hGlFon);
утечка ресурсов
всегда нужно возвращать прежнее значение
C
1
2
3
4
HBITMAP hOldBmp =SelectObject(hmdc, hGlFon);
// поработал и выбрал предыдущее
SelectObject(hmdc, hOldBmp);
 DeleteDC(hmdc);
Цитата Сообщение от kalter14i77 Посмотреть сообщение
DeleteObject(hGlFon);
не сработает пока объект выбран в контексте рисования
0
0 / 0 / 0
Регистрация: 03.11.2014
Сообщений: 47
07.12.2014, 21:09  [ТС] 14
ValeryS, попробовал в том же контексте(hmdc) ещё текст повыводить, вывело только то, что в предел размеров битмапы вошло
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
hmdc = CreateCompatibleDC(hdc);
       GetObject(hFon, sizeof(bm), (LPSTR) &bm);
       HBITMAP hGlFon = CreateCompatibleBitmap(hdc, bm.bmWidth, bm.bmHeight);
       HBITMAP hOldBitmap = SelectObject(hmdc, hGlFon);
       hGlFon = hFon;
       SelectObject(hmdc, hGlFon);
       BitBlt(hdc, 0, 0, bm.bmWidth, bm.bmHeight, hmdc, 0, 0, SRCCOPY);
       /*SelectObject(hmdc, hOldBitmap);*/
       DeleteObject(hGlFon);
       static LOGFONT lf; 
       lf.lfCharSet = DEFAULT_CHARSET; 
       lf.lfPitchAndFamily = DEFAULT_PITCH; 
       strcpy(lf.lfFaceName, "Times New Roman"); 
       lf.lfHeight = 20; 
       lf.lfWidth = 10; 
       lf.lfWeight = 40; 
       lf.lfEscapement = 0;
       HFONT hFont = CreateFontIndirect(&lf);
       SelectObject(hmdc, hFont); 
       SetTextColor(hmdc, RGB(255, 0, 0));
       SetBkColor(hmdc, RGB(0, 108, 0));
       TextOut(hmdc, 850, 50, "Профиль:", strlen("Профиль:"));
       TextOut(hmdc, 850, 200, "Стек:", strlen("Стек:"));
       TextOut(hmdc, 850, 350, "Ставка:", strlen("Ставка:"));
       TextOut(hmdc, 850, 500, "Выигрыш:", strlen("Выигрыш:"));
       TextOut(hmdc, 523, 608, "Сброс ставки", strlen("Сброс ставки"));
       SetTextColor(hmdc, RGB(0, 0, 0));
       TextOut(hmdc, 850, 90, namebuf, strlen(namebuf));
       _itoa(stak, stekbuf, 10);
       TextOut(hmdc, 850, 240, stekbuf, strlen(stekbuf));
       _itoa(stavka, stavkabuf, 10);
       TextOut(hmdc, 850, 390, stavkabuf, strlen(stavkabuf));
       _itoa(kolwin, winbuf, 10);
       TextOut(hmdc, 850, 540, winbuf, strlen(winbuf));
       SetBkColor(hmdc, RGB(255, 255, 255));
       TextOut(hmdc, 110, 45, boerisay, strlen(boerisay));
       TextOut(hmdc, 460, 45, negreanusay, strlen(negreanusay));
       TextOut(hmdc, 278, 668, "25", strlen("25"));
       SetBkColor(hmdc, RGB(140, 0, 0));
       TextOut(hmdc, 371, 668, "100", strlen("100"));
       SetTextColor(hmdc, RGB(255, 255, 255));
       SetBkColor(hmdc, RGB(0, 45, 100));
       TextOut(hmdc, 184, 668, "5", strlen("5"));
       SetBkColor(hmdc, RGB(0, 0, 0));
       TextOut(hmdc, 85, 668, "1", strlen("1"));
       BitBlt(hdc, 0, 0, bm.bmWidth, bm.bmHeight, hmdc, 0, 0, SRCCOPY);
       DeleteObject(hFont);
       DeleteDC(hmdc);
А вообще, спасибо Вам огромное, что на меня дурака столько времени потратили
0
Модератор
Эксперт по электронике
8946 / 6712 / 921
Регистрация: 14.02.2011
Сообщений: 23,686
07.12.2014, 21:23 15
Цитата Сообщение от kalter14i77 Посмотреть сообщение
ещё текст повыводить, вывело только то, что в предел размеров битмапы вошло
нук так и должно быть
размеры то картинки указал
Цитата Сообщение от kalter14i77 Посмотреть сообщение
HBITMAP hGlFon = CreateCompatibleBitmap(hdc, bm.bmWidth, bm.bmHeight);
в таких случаях делается так
создается два контекста
в один выбираешь битмап, который нужно отобразить
а второй по размерам с экран
из первого копируешь картинку во второй, потом там рисуешь что надо
и копируешь второй на экран
0
0 / 0 / 0
Регистрация: 03.11.2014
Сообщений: 47
07.12.2014, 22:12  [ТС] 16
ValeryS, Вот что я написал, всё вывело, протестировал, но мерцания остались( даже ещё больше выраженными стали
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
hmdc = CreateCompatibleDC(hdc);
       hmdc2 = CreateCompatibleDC(hdc);
       HBITMAP hGl = CreateCompatibleBitmap(hdc, 1000, 800);
       SelectObject(hmdc, hGl);
       GetObject(hFon, sizeof(bm), (LPSTR) &bm);
       HBITMAP hGlFon = CreateCompatibleBitmap(hdc, bm.bmWidth, bm.bmHeight);
       hGlFon = hFon;
       SelectObject(hmdc2, hGlFon);
       BitBlt(hmdc, 0, 0, bm.bmWidth, bm.bmHeight, hmdc2, 0, 0, SRCCOPY);
       DeleteDC(hmdc2);
       DeleteObject(hGlFon);
 
       static LOGFONT lf; 
       lf.lfCharSet = DEFAULT_CHARSET; 
       lf.lfPitchAndFamily = DEFAULT_PITCH; 
       strcpy(lf.lfFaceName, "Times New Roman"); 
       lf.lfHeight = 20; 
       lf.lfWidth = 10; 
       lf.lfWeight = 40; 
       lf.lfEscapement = 0;
       HFONT hFont = CreateFontIndirect(&lf);
       SelectObject(hmdc, hFont); 
       SetTextColor(hmdc, RGB(255, 0, 0));
       SetBkColor(hmdc, RGB(0, 108, 0));
       TextOut(hmdc, 850, 50, "Профиль:", strlen("Профиль:"));
       TextOut(hmdc, 850, 200, "Стек:", strlen("Стек:"));
       TextOut(hmdc, 850, 350, "Ставка:", strlen("Ставка:"));
       TextOut(hmdc, 850, 500, "Выигрыш:", strlen("Выигрыш:"));
       TextOut(hmdc, 523, 608, "Сброс ставки", strlen("Сброс ставки"));
       SetTextColor(hmdc, RGB(0, 0, 0));
       TextOut(hmdc, 850, 90, namebuf, strlen(namebuf));
       _itoa(stak, stekbuf, 10);
       TextOut(hmdc, 850, 240, stekbuf, strlen(stekbuf));
       _itoa(stavka, stavkabuf, 10);
       TextOut(hmdc, 850, 390, stavkabuf, strlen(stavkabuf));
       _itoa(kolwin, winbuf, 10);
       TextOut(hmdc, 850, 540, winbuf, strlen(winbuf));
       SetBkColor(hmdc, RGB(255, 255, 255));
       TextOut(hmdc, 110, 45, boerisay, strlen(boerisay));
       TextOut(hmdc, 460, 45, negreanusay, strlen(negreanusay));
       TextOut(hmdc, 278, 668, "25", strlen("25"));
       SetBkColor(hmdc, RGB(140, 0, 0));
       TextOut(hmdc, 371, 668, "100", strlen("100"));
       SetTextColor(hmdc, RGB(255, 255, 255));
       SetBkColor(hmdc, RGB(0, 45, 100));
       TextOut(hmdc, 184, 668, "5", strlen("5"));
       SetBkColor(hmdc, RGB(0, 0, 0));
       TextOut(hmdc, 85, 668, "1", strlen("1"));
       BitBlt(hdc, 0, 0, 1000, 800, hmdc, 0, 0, SRCCOPY);
       DeleteDC(hmdc);
       DeleteObject(hFont);
0
Модератор
Эксперт по электронике
8946 / 6712 / 921
Регистрация: 14.02.2011
Сообщений: 23,686
07.12.2014, 22:22 17
Цитата Сообщение от kalter14i77 Посмотреть сообщение
HBITMAP hGlFon = CreateCompatibleBitmap(hdc, bm.bmWidth, bm.bmHeight);
hGlFon = hFon;
эти две строчки исключают друг друга
Цитата Сообщение от kalter14i77 Посмотреть сообщение
SelectObject(hmdc2, hGlFon);
я тебе показывал как правильно делать
Цитата Сообщение от kalter14i77 Посмотреть сообщение
но мерцания остались
хотелось бы полностью ветку WM_PAINT
вот это
Цитата Сообщение от kalter14i77 Посмотреть сообщение
ValidateRect(hwnd, NULL);
выбросил?
0
0 / 0 / 0
Регистрация: 03.11.2014
Сообщений: 47
07.12.2014, 22:40  [ТС] 18
ValeryS, Вот весь WM_PAINTнедоработанный) но вывел я уже всё
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
case WM_PAINT:
     {
       HDC hdc, hmdc, hmdc2;
       PAINTSTRUCT ps;
       BITMAP bm;
       HBITMAP hFon = LoadBitmap(hInstan, "GLAVN_PIC");
       HBITMAP hBlackChip = LoadBitmap(hInstan, "BLACK_CHIP");
       HBITMAP hBlueChip = LoadBitmap(hInstan, "BLUE_CHIP");
       HBITMAP hWhiteChip = LoadBitmap(hInstan, "WHITE_CHIP");
       HBITMAP hRedChip = LoadBitmap(hInstan, "RED_CHIP");
       HBITMAP hClearChip = LoadBitmap(hInstan, "CLEAR_CHIP");
       HBITMAP hButton = LoadBitmap(hInstan, "PLAY_BUTTON");
       HICON hBlackIcon = LoadIcon(hInstan, "BLACK_CUR");
       HICON hBlueIcon = LoadIcon(hInstan, "BLUE_ICON");
       HICON hWhiteIcon = LoadIcon(hInstan, "WHITE_ICON");
       HICON hRedIcon = LoadIcon(hInstan, "RER_ICON");
 
       hdc = BeginPaint(hwnd, &ps);
 
       hmdc = CreateCompatibleDC(hdc);
       hmdc2 = CreateCompatibleDC(hdc);
       HBITMAP hGl = CreateCompatibleBitmap(hdc, 1000, 800);
       SelectObject(hmdc, hGl);
       RECT rect;
       rect.left = 0;
       rect.top = 0;
       rect.right = 1000;
       rect.bottom = 800;
       FillRect(hmdc, &rect, (HBRUSH)CreateSolidBrush(RGB(0,108,0))); 
       GetObject(hFon, sizeof(bm), (LPSTR) &bm);
       HBITMAP hGlFon = CreateCompatibleBitmap(hdc, bm.bmWidth, bm.bmHeight);
       hGlFon = hFon;
       SelectObject(hmdc2, hGlFon);
       BitBlt(hmdc, 0, 0, bm.bmWidth, bm.bmHeight, hmdc2, 0, 0, SRCCOPY);
       DeleteDC(hmdc2);
       DeleteObject(hGlFon);
       
       hmdc2 = CreateCompatibleDC(hdc);
       GetObject(hBlackChip, sizeof(bm), (LPSTR) &bm);
       hGlFon = CreateCompatibleBitmap(hdc, bm.bmWidth, bm.bmHeight);
       hGlFon = hBlackChip;
       SelectObject(hmdc2, hGlFon);
       BitBlt(hmdc, 50, 638, bm.bmWidth, bm.bmHeight, hmdc2, 0, 0, SRCCOPY);
       DeleteDC(hmdc2);
       DeleteObject(hGlFon);
 
       hmdc2 = CreateCompatibleDC(hdc);
       GetObject(hBlueChip, sizeof(bm), (LPSTR) &bm);
       hGlFon = CreateCompatibleBitmap(hdc, bm.bmWidth, bm.bmHeight);
       hGlFon = hBlueChip;
       SelectObject(hmdc2, hGlFon);
       BitBlt(hmdc, 150, 638, bm.bmWidth, bm.bmHeight, hmdc2, 0, 0, SRCCOPY);
       DeleteDC(hmdc2);
       DeleteObject(hGlFon);
 
       hmdc2 = CreateCompatibleDC(hdc);
       GetObject(hWhiteChip, sizeof(bm), (LPSTR) &bm);
       hGlFon = CreateCompatibleBitmap(hdc, bm.bmWidth, bm.bmHeight);
       hGlFon = hWhiteChip;
       SelectObject(hmdc2, hGlFon);
       BitBlt(hmdc, 250, 638, bm.bmWidth, bm.bmHeight, hmdc2, 0, 0, SRCCOPY);
       DeleteDC(hmdc2);
       DeleteObject(hGlFon);
 
       hmdc2 = CreateCompatibleDC(hdc);
       GetObject(hRedChip, sizeof(bm), (LPSTR) &bm);
       hGlFon = CreateCompatibleBitmap(hdc, bm.bmWidth, bm.bmHeight);
       hGlFon = hRedChip;
       SelectObject(hmdc2, hGlFon);
       BitBlt(hmdc, 350, 638, bm.bmWidth, bm.bmHeight, hmdc2, 0, 0, SRCCOPY);
       DeleteDC(hmdc2);
       DeleteObject(hGlFon);
       
       hmdc2 = CreateCompatibleDC(hdc);
       GetObject(hClearChip, sizeof(bm), (LPSTR) &bm);
       hGlFon = CreateCompatibleBitmap(hdc, bm.bmWidth, bm.bmHeight);
       hGlFon = hClearChip;
       SelectObject(hmdc2, hGlFon);
       BitBlt(hmdc, 550, 638, bm.bmWidth, bm.bmHeight, hmdc2, 0, 0, SRCCOPY);
       DeleteDC(hmdc2);
       DeleteObject(hGlFon);
       
       hmdc2 = CreateCompatibleDC(hdc);
       GetObject(hButton, sizeof(bm), (LPSTR) &bm);
       hGlFon = CreateCompatibleBitmap(hdc, bm.bmWidth, bm.bmHeight);
       hGlFon = hButton;
       SelectObject(hmdc2, hGlFon);
       BitBlt(hmdc, 700, 628, bm.bmWidth, bm.bmHeight, hmdc2, 0, 0, SRCCOPY);
       DeleteDC(hmdc2);
       DeleteObject(hGlFon);
 
       static LOGFONT lf; 
       lf.lfCharSet = DEFAULT_CHARSET; 
       lf.lfPitchAndFamily = DEFAULT_PITCH; 
       strcpy(lf.lfFaceName, "Times New Roman"); 
       lf.lfHeight = 20; 
       lf.lfWidth = 10; 
       lf.lfWeight = 40; 
       lf.lfEscapement = 0;
       HFONT hFont = CreateFontIndirect(&lf);
       SelectObject(hmdc, hFont); 
       SetTextColor(hmdc, RGB(255, 0, 0));
       SetBkColor(hmdc, RGB(0, 108, 0));
       TextOut(hmdc, 850, 50, "Профиль:", strlen("Профиль:"));
       TextOut(hmdc, 850, 200, "Стек:", strlen("Стек:"));
       TextOut(hmdc, 850, 350, "Ставка:", strlen("Ставка:"));
       TextOut(hmdc, 850, 500, "Выигрыш:", strlen("Выигрыш:"));
       TextOut(hmdc, 523, 608, "Сброс ставки", strlen("Сброс ставки"));
       SetTextColor(hmdc, RGB(0, 0, 0));
       TextOut(hmdc, 850, 90, namebuf, strlen(namebuf));
       _itoa(stak, stekbuf, 10);
       TextOut(hmdc, 850, 240, stekbuf, strlen(stekbuf));
       _itoa(stavka, stavkabuf, 10);
       TextOut(hmdc, 850, 390, stavkabuf, strlen(stavkabuf));
       _itoa(kolwin, winbuf, 10);
       TextOut(hmdc, 850, 540, winbuf, strlen(winbuf));
       SetBkColor(hmdc, RGB(255, 255, 255));
       TextOut(hmdc, 110, 45, boerisay, strlen(boerisay));
       TextOut(hmdc, 460, 45, negreanusay, strlen(negreanusay));
       TextOut(hmdc, 278, 668, "25", strlen("25"));
       SetBkColor(hmdc, RGB(140, 0, 0));
       TextOut(hmdc, 371, 668, "100", strlen("100"));
       SetTextColor(hmdc, RGB(255, 255, 255));
       SetBkColor(hmdc, RGB(0, 45, 100));
       TextOut(hmdc, 184, 668, "5", strlen("5"));
       SetBkColor(hmdc, RGB(0, 0, 0));
       TextOut(hmdc, 85, 668, "1", strlen("1"));
       BitBlt(hdc, 0, 0, 1000, 800, hmdc, 0, 0, SRCCOPY);
       DeleteDC(hmdc);
       DeleteObject(hFont);
 
       EndPaint(hwnd, &ps);
       return 0;
     }
0
Модератор
Эксперт по электронике
8946 / 6712 / 921
Регистрация: 14.02.2011
Сообщений: 23,686
07.12.2014, 22:56 19
Цитата Сообщение от kalter14i77 Посмотреть сообщение
DeleteDC(hmdc2);
* * * *DeleteObject(hGlFon);
hmdc2 = CreateCompatibleDC(hdc);
зачем сначала удалять потом создавать?
по моему у тебя банальная утечка ресурсов
Цитата Сообщение от kalter14i77 Посмотреть сообщение
C
1
2
hGlFon = CreateCompatibleBitmap(hdc, bm.bmWidth, bm.bmHeight);
       hGlFon = hWhiteChip;
открой диспетчер задач
перейди на вкладку "Процессы"
в меню "Вид" ->"выбрать столбцы" поставь галку "Объекты GDI"
и понаблюдай за ними растут или нет?
0
0 / 0 / 0
Регистрация: 03.11.2014
Сообщений: 47
07.12.2014, 23:02  [ТС] 20
ValeryS, насколько я понял, они растут каждый раз, когда идёт перересовка(увеличились с 40 до 540, потом закрыл прогу)
0
07.12.2014, 23:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.12.2014, 23:02
Помогаю со студенческими работами здесь

Моргание экрана (graphics.h)
Привет. Я уже наверное уже всех задолбал со своей &quot;Жизнью&quot; :) Извиняйте, ещё один вопрос,...

RX 5700XT Моргание экрана
Всем привет! При сворачивании игры начинает моргать экран. (Не сильно но заметно, особенно на...

Кривое изображение и моргание экрана
объясните причину моргания экрана и изображения пятен на экране. На аппаратную ошибку непохожо тк...

Моргание при показе формы
Есть QMainForm, на нем постоянно в графическом представлении рисуются графические объекты. И вот я...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru