290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12

Как можно ускорить процесс рисования?

16.02.2012, 18:52. Показов 1581. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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
#include<windows.h>
#include<string.h>
#define  ID_TIMER  777u
#include<math.h>
struct point
{
 double x,y;     
};
 
HBRUSH tbrush;
RECT trect;
long tspeed  = 1; // ???????? ???????????
HWND hWnd;
MSG lpMsg;
WNDCLASS w;
HDC hdc;
point elips1, elips2;
const unsigned int TIMER_2SEC = 2;
 
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
 
float FNy1(double x)
{
    return sin(x);
}
 
float FNy2(double x)
{
    return cosl(x);
}
 
void __stdcall TimerProc (HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
{
 InvalidateRect(hWnd, &trect, TRUE);
 
    elips1.x+=0.1;
    elips1.y=350 -100* FNy1((elips1.x-320)/30);
    elips2.x+=0.1;
    elips2.y=350 -100* FNy2((elips1.x-320)/30);
    
}
char szProgName[]="Имя программы";
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow)
{
 
elips1.x=0;elips1.y=0;
elips2.x=0;elips2.y=0;
 
 
 
//дальше я использовал шаблонный код windows application
w.lpszClassName=szProgName; //имя программы - объявлено выше
w.hInstance=hInstance; //идентификатор текущего приложения
w.lpfnWndProc=WndProc; //указатель на функцию окна
w.hCursor=LoadCursor(NULL, IDC_ARROW); //загружаем курсор
w.hIcon=0; 
w.lpszMenuName=0; 
w.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); //цвет фона окна
w.style=CS_HREDRAW|CS_VREDRAW;
w.cbClsExtra=0;
w.cbWndExtra=0;
 
//Если не удалось зарегистрировать класс окна - выходим
if(!RegisterClass(&w))
return 0;
 
//Создадим окно в памяти, заполнив аргументы CreateWindow
hWnd=CreateWindow(szProgName, //Имя программы
"Грфические возможности Win32 API", //Заголовок окна
WS_OVERLAPPEDWINDOW, //Стиль окна - перекрывающееся
0, //положение окна на экране по х
0, //положение по у
700, //ширина
730, //высота
(HWND)NULL, //идентификатор родительского окна
(HMENU)NULL, //идентификатор меню
(HINSTANCE)hInstance, //идентификатор экземпляра программы
(HINSTANCE)NULL); //отсутствие дополнительных параметров
 
//Выводим окно из памяти на экран
ShowWindow(hWnd, nCmdShow);
//Обновим содержимое окна
UpdateWindow(hWnd);
 
//Цикл обработки сообщений
 
while(GetMessage(&lpMsg, NULL, 0, 0)) {
PeekMessage(&lpMsg, NULL, 0, 0, PM_REMOVE);// ye;yj lkz gthtlfxb dhtvtyb    
TranslateMessage(&lpMsg); 
DispatchMessage(&lpMsg);
}
return(lpMsg.wParam); 
}
 
 
 
//Функция окна
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){
       PAINTSTRUCT ps;// структура для рисования
       HGDIOBJ  old;// левая структура
       HDC hdc;// дискриптор усстройство вывода
 
       switch (message) {
             case WM_CREATE:
                    SetTimer(hWnd, ID_TIMER, 1, TimerProc); //установка обработки таймера на функцию TimerProc
                    SetRect(&trect, 0, 0, 1280, 1024);// для прорисовки окна
                    break;
             case WM_PAINT: 
                    hdc = BeginPaint(hWnd, &ps);
                    
                    tbrush = CreateSolidBrush(RGB(0, 255, 0)); // создание кисти
                    old  = SelectObject(hdc, tbrush);// выбор кисти
                  
                    Ellipse(hdc,elips1.x-25,elips1.y-25,elips1.x+25,elips1.y+25);// рисуем круг
                    Ellipse(hdc,elips2.x-25,elips2.y-25,elips2.x+25,elips2.y+25);// рисуем круг
                    
                    old = SelectObject(hdc, old);
                                   
                   
                   
                  
                    
                    EndPaint(hWnd, &ps);
                    break;
            case WM_DESTROY:
                    DeleteObject(tbrush);
                    KillTimer(hWnd, ID_TIMER);
                    PostQuitMessage(0);
                    break;
            default: return DefWindowProc(hWnd, message, wParam, lParam);
   }
   return 0;
}
компилятор dev c++

Добавлено через 7 минут
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
#include<windows.h>
#include<string.h>
#define  ID_TIMER  777u
#include<math.h>
struct point
{
 double y,x;     
};
 
HBRUSH tbrush;
RECT trect;
long tspeed  = 1; // ???????? ???????????
HWND hWnd;
MSG lpMsg;
WNDCLASS w;
HDC hdc;
point elips1, elips2;
const unsigned int TIMER_2SEC = 2;
 
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
 
float FNy1(double x)
{
    return sin(x);
}
 
float FNy2(double x)
{
    return cosl(x);
}
 
void __stdcall TimerProc (HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
{
 InvalidateRect(hWnd, &trect, TRUE);
 
    elips1.x++;
    elips1.y=350 - 100*FNy1((elips1.x)/25);
    elips2.x++;
    elips2.y=350 - 100*FNy2((elips1.x)/25);
    
}
char szProgName[]="Имя программы";
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow)
{
 
elips1.x=0;elips1.y=0;
elips2.x=0;elips2.y=0;
 
 
 
//дальше я использовал шаблонный код windows application
w.lpszClassName=szProgName; //имя программы - объявлено выше
w.hInstance=hInstance; //идентификатор текущего приложения
w.lpfnWndProc=WndProc; //указатель на функцию окна
w.hCursor=LoadCursor(NULL, IDC_ARROW); //загружаем курсор
w.hIcon=0; 
w.lpszMenuName=0; 
w.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); //цвет фона окна
w.style=CS_HREDRAW|CS_VREDRAW;
w.cbClsExtra=0;
w.cbWndExtra=0;
 
//Если не удалось зарегистрировать класс окна - выходим
if(!RegisterClass(&w))
return 0;
 
//Создадим окно в памяти, заполнив аргументы CreateWindow
hWnd=CreateWindow(szProgName, //Имя программы
"Грфические возможности Win32 API", //Заголовок окна
WS_OVERLAPPEDWINDOW, //Стиль окна - перекрывающееся
0, //положение окна на экране по х
0, //положение по у
700, //ширина
730, //высота
(HWND)NULL, //идентификатор родительского окна
(HMENU)NULL, //идентификатор меню
(HINSTANCE)hInstance, //идентификатор экземпляра программы
(HINSTANCE)NULL); //отсутствие дополнительных параметров
 
//Выводим окно из памяти на экран
ShowWindow(hWnd, nCmdShow);
//Обновим содержимое окна
UpdateWindow(hWnd);
 
//Цикл обработки сообщений
 
while(GetMessage(&lpMsg, NULL, 0, 0)) {
PeekMessage(&lpMsg, NULL, 0, 0, PM_REMOVE);// ye;yj lkz gthtlfxb dhtvtyb    
TranslateMessage(&lpMsg); 
DispatchMessage(&lpMsg);
}
return(lpMsg.wParam); 
}
 
 
 
//Функция окна
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){
       PAINTSTRUCT ps;// структура для рисования
       HGDIOBJ  old;// левая структура
       HDC hdc;// дискриптор усстройство вывода
 
       switch (message) {
             case WM_CREATE:
                    SetTimer(hWnd, ID_TIMER, 1, TimerProc); //установка обработки таймера на функцию TimerProc
                    SetRect(&trect, 0, 0, 1280, 1024);// для прорисовки окна
                    break;
             case WM_PAINT: 
                    hdc = BeginPaint(hWnd, &ps);
                    
                    tbrush = CreateSolidBrush(RGB(0, 255, 0)); // создание кисти
                    old  = SelectObject(hdc, tbrush);// выбор кисти
                  
                    Ellipse(hdc,elips1.x-25l,elips1.y-25l,elips1.x+25l,elips1.y+25l);// рисуем круг
                    Ellipse(hdc,elips2.x-25l,elips2.y-25l,elips2.x+25l,elips2.y+25l);// рисуем круг
                    
                    old = SelectObject(hdc, old);
                                   
                   
                   
                  
                    
                    EndPaint(hWnd, &ps);
                    break;
            case WM_DESTROY:
                    DeleteObject(tbrush);
                    KillTimer(hWnd, ID_TIMER);
                    PostQuitMessage(0);
                    break;
            default: return DefWindowProc(hWnd, message, wParam, lParam);
   }
   return 0;
}
вот последний код

Добавлено через 9 минут
и ещё как так можно сделать чтоб в окне оставался след?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.02.2012, 18:52
Ответы с готовыми решениями:

Как можно завершить процесс зная его имя ?
как можно завершить процесс зная его имя ?

Долгая загрузка StringList в RichEdit. Можно ли как-то ускорить процесс?
Есть StringList в нём хранится где-то от 60 до 200 тысяч строк по 100 символов в каждой. Сам StringList формируется достаточно быстро, но...

Как ускорить рисования лабиринта?
на форме есть панель, которая рисует лабиринт и кнопка которая обновляет панель. проблема в том, что лабиринт прорисовывается очень долго....

3
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
16.02.2012, 18:53
Van111, посмотри сюда
https://www.cyberforum.ru/cpp-... ost2381530
1
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
16.02.2012, 19:45  [ТС]
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
#include<windows.h>
#include<string.h>
#define  ID_TIMER  777u
#include<math.h>
struct point
{
 double y,x;     
};
 
HBRUSH tbrush;
RECT trect;
long tspeed  = 1; // ???????? ???????????
HWND hWnd;
MSG lpMsg;
WNDCLASS w;
HDC hdc;
point elips1, elips2;
point elips11,elips22;
const unsigned int TIMER_2SEC = 2;
 
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
 
float FNy1(double x)
{
    return sin(x);
}
 
float FNy2(double x)
{
    return -sin(x);
}
 
void __stdcall TimerProc (HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
{
 
InvalidateRect(hWnd, &trect, 1);
    elips1.x++;
    elips1.y=350 - 100*FNy1((elips1.x)/25);
    elips2.x++;
    elips2.y=350 - 100*FNy2((elips1.x)/25);
 
    
}
char szProgName[]="Èìÿ ïðîãðàììû";
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow)
{
 
elips1.x=0;elips1.y=350;
elips2.x=0;elips2.y=350;
 
 
 
//äàëüøå ÿ èñïîëüçîâàë øàáëîííûé êîä windows application
w.lpszClassName=szProgName; //èìÿ ïðîãðàììû - îáúÿâëåíî âûøå
w.hInstance=hInstance; //èäåíòèôèêàòîð òåêóùåãî ïðèëîæåíèÿ
w.lpfnWndProc=WndProc; //óêàçàòåëü íà ôóíêöèþ îêíà
w.hCursor=LoadCursor(NULL, IDC_ARROW); //çàãðóæàåì êóðñîð
w.hIcon=0; 
w.lpszMenuName=0; 
w.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); //öâåò ôîíà îêíà
w.style=CS_HREDRAW|CS_VREDRAW;
w.cbClsExtra=0;
w.cbWndExtra=0;
 
//Åñëè íå óäàëîñü çàðåãèñòðèðîâàòü êëàññ îêíà - âûõîäèì
if(!RegisterClass(&w))
return 0;
 
//Ñîçäàäèì îêíî â ïàìÿòè, çàïîëíèâ àðãóìåíòû CreateWindow
hWnd=CreateWindow(szProgName, //Èìÿ ïðîãðàììû
"Ãðôè÷åñêèå âîçìîæíîñòè Win32 API", //Çàãîëîâîê îêíà
WS_OVERLAPPEDWINDOW, //Ñòèëü îêíà - ïåðåêðûâàþùååñÿ
0, //ïîëîæåíèå îêíà íà ýêðàíå ïî õ
0, //ïîëîæåíèå ïî ó
700, //øèðèíà
730, //âûñîòà
(HWND)NULL, //èäåíòèôèêàòîð ðîäèòåëüñêîãî îêíà
(HMENU)NULL, //èäåíòèôèêàòîð ìåíþ
(HINSTANCE)hInstance, //èäåíòèôèêàòîð ýêçåìïëÿðà ïðîãðàììû
(HINSTANCE)NULL); //îòñóòñòâèå äîïîëíèòåëüíûõ ïàðàìåòðîâ
 
//Âûâîäèì îêíî èç ïàìÿòè íà ýêðàí
ShowWindow(hWnd, nCmdShow);
//Îáíîâèì ñîäåðæèìîå îêíà
 
 
//Öèêë îáðàáîòêè ñîîáùåíèé
 
while(GetMessage(&lpMsg, NULL, 0, 0)) {
PeekMessage(&lpMsg, NULL, 0, 0, PM_REMOVE);// ye;yj lkz gthtlfxb dhtvtyb    
TranslateMessage(&lpMsg); 
DispatchMessage(&lpMsg);
}
return(lpMsg.wParam); 
}
 
 
 
//Ôóíêöèÿ îêíà
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){
       PAINTSTRUCT ps;// ñòðóêòóðà äëÿ ðèñîâàíèÿ
       HGDIOBJ  old;// ëåâàÿ ñòðóêòóðà
       HDC hdc;// äèñêðèïòîð óññòðîéñòâî âûâîäà
 
       switch (message) {
             case WM_CREATE:
                    SetTimer(hWnd, ID_TIMER, 20, TimerProc); //óñòàíîâêà îáðàáîòêè òàéìåðà íà ôóíêöèþ TimerProc
                    SetRect(&trect, 0, 0, 1280, 1024);// äëÿ ïðîðèñîâêè îêíà
              
                    break;
             case WM_PAINT: 
                    hdc = BeginPaint(hWnd, &ps);
                    
                    tbrush = CreateSolidBrush(RGB(0, 255, 0)); // ñîçäàíèå êèñòè
                    old  = SelectObject(hdc, tbrush);// âûáîð êèñòè
                  
                    Ellipse(hdc,elips1.x-25l,elips1.y-25l,elips1.x+25l,elips1.y+25l);// ðèñóåì êðóã
                    Ellipse(hdc,elips2.x-25l,elips2.y-25l,elips2.x+25l,elips2.y+25l);// ðèñóåì êðóã
                  
                       
    elips11.x=0;elips11.y=0;
    elips22.x=0;elips22.y=0;
    
    for(elips11.x=0,elips22.x=0;elips11.x<700;elips11.x+=.1,elips22.x+=.1)
    {
     
     elips11.y=350 - 100*FNy1((elips11.x)/25);
     elips22.y=350 - 100*FNy2((elips22.x)/25);
        
      SetPixel(hdc,elips11.x,elips11.y,RGB(100,0,100));// ðèñóåì êðóã
      SetPixel(hdc,elips22.x,elips22.y,RGB(100,0,100));// ðèñóåì êðóã
      
    }
    MoveToEx(hdc,0,350,0);
    LineTo(hdc,700,350);
                  
                  
                    old = SelectObject(hdc, old);
                                   
                   
                   
                  
                    
                    EndPaint(hWnd, &ps);
                    break;
            case WM_DESTROY:
                    DeleteObject(tbrush);
                    KillTimer(hWnd, ID_TIMER);
                    PostQuitMessage(0);
                    break;
            default: return DefWindowProc(hWnd, message, wParam, lParam);
   }
   return 0;
}
как убрать мерцания?
0
20 / 20 / 4
Регистрация: 23.10.2009
Сообщений: 139
17.02.2012, 07:45
Цитата Сообщение от Van111 Посмотреть сообщение
как убрать мерцания?
Используй двойную буферизацию, пример есть в этой теме - Двойная буферизация!
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.02.2012, 07:45
Помогаю со студенческими работами здесь

Как ускорить процесс
Я в VBA начинающий, создал такок вот чудо: For tt = 2 To 13 For u = 3 To 70 For u2 = 10 To 140 If...

Как ускорить процесс пингование
есть такой код: private void ScanButton_Click(object sender, EventArgs e) { string iptextbox; ...

Как ускорить процесс выборки?
Есть таблица в эксессе с большим кол-вом записей. Около 170 000. При загрузке формы соединяюсь с базой и делаю выборку. В нее попадает ...

Как ускорить процесс удаления данных
Всем привет!!! Необходимо очистить оооочень большой объем данных в ячейках. НО!!! Только значения. Использую следующую конструкцию: ...

Как ускорить процесс работы с файлами?
Вот код. Он объяснит проблему лучше меня. Там где 1.txt попробуйте свой файл от 150Кб. import java.io.*; import java.util.*; ...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru