Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
0 / 0 / 0
Регистрация: 10.01.2020
Сообщений: 29

Как организовать два потока для отрисовки окна?

12.12.2020, 17:56. Показов 3762. Ответов 26

Студворк — интернет-сервис помощи студентам
Хочу вынести отрисовку поля и заднего фона в два отдельных потока. Еще нужно сделать плавное изменение заднего фона. С потоками проблем нет. В случае с полем создал семафор и при клике на определенную область цикл в потоке открывается. Для изменения заднего фона в просто в цикле перехожу к другому определяю новый. Естественно используя двойную буферизацию. Не могу разобраться как работать в таком случае с контекстом изображения. Что где вызывать? Как тогда использовать WM_PAINT?
Вроде написал все через один HDC, но в таком случае при уменьшении или увеличении окна картинка перебивается белым фоном.
Миниатюры
Как организовать два потока для отрисовки окна?  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.12.2020, 17:56
Ответы с готовыми решениями:

Создание отдельного потока для отрисовки змейки
partial class View : UserControl { Model model; public View(Model model) { ...

Организовать два потока в цикле
Доброго времени суток, Хочу написать первую игру. Нужно организовать цикл, в котором возможен ввод, но он не ожидает нажатия клавиши....

Организовать работу в два потока в консоли
Можете помочь набросать код чтобы в консоли было 2 потока: 1 вывод строки на текущей позиции курсора 2 ввод в строку посимвольно на...

26
0 / 0 / 0
Регистрация: 10.01.2020
Сообщений: 29
12.12.2020, 20: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
case WM_PAINT: {
        hdc = BeginPaint(hwnd, &ps);
        HDC memDC = CreateCompatibleDC(mHdc);
        HBITMAP memBM = CreateCompatibleBitmap(mHdc, mRPos.right - mRPos.left, mRPos.bottom - mRPos.top);
        GetClientRect(mHwnd, &mRPos);
        SelectObject(memDC, memBM);
        /*updating background*/
        SelectObject(memDC, GetStockObject(DC_BRUSH));
        SetDCBrushColor(memDC, RGB(c1.red, c1.green, c1.blue));
        Rectangle(memDC, 0, 0, mRPos.right, mRPos.bottom);
        /*updating field*/
        DRAWING_FIELD(memDC, mHwnd, mRPos);
 
        BitBlt(mHdc, 0, 0, mRPos.right - mRPos.left, mRPos.bottom - mRPos.top, memDC, 0, 0, SRCCOPY);
 
        DeleteDC(memDC);
        DeleteObject(memBM);
        EndPaint(hwnd, &ps);
        break;
    }
DWORD WINAPI BACKGROUND(LPVOID lpParam) {
    BOOL bContinue = true;
    bool flag = true;
    while (bContinue)
    {
        if (flag)
            if (c1.green < 255)
                c1.green+= 1;
            else
                flag = false;
        else
            if (c1.green > 0)
                c1.green-=1;
            else
                flag = true;
        
        InvalidateRect(mHwnd, NULL, TRUE);
        Sleep(50);
    }
    return 0;
}
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
12.12.2020, 20:56
Цитата Сообщение от teddehhh Посмотреть сообщение
Костыль уже получается какой-то.
Ага, конечно. До этого, я так понимаю, ты не костыль делал, с потоками?
Там просто то ли стиль окна надо поменять, то ли стиль класса окна, чтоб не делал erase backrownd при изменении размера. Либо что-то типа того.
0
0 / 0 / 0
Регистрация: 10.01.2020
Сообщений: 29
12.12.2020, 21:19  [ТС]
oleg-m1973, Ну я же пришел узнать, как грамотно сделать. И я думаю, что его еще здесь не прозвучало.
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
12.12.2020, 21:23
Цитата Сообщение от teddehhh Посмотреть сообщение
И я думаю, что его еще здесь не прозвучало.
Не прозвучало? Ну извини тогда, больше ничем не могу помочь.
0
0 / 0 / 0
Регистрация: 10.01.2020
Сообщений: 29
12.12.2020, 21:39  [ТС]
oleg-m1973, Ты про свое первое сообщение? Извини, если ошибся. Просто запутался уже
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
12.12.2020, 22:04
Цитата Сообщение от teddehhh Посмотреть сообщение
oleg-m1973, Ты про свое первое сообщение? Извини, если ошибся. Просто запутался уже
Всё остальное, я так понимаю, ты даже не читал? Ну, дело твоё.
0
0 / 0 / 0
Регистрация: 10.01.2020
Сообщений: 29
12.12.2020, 23:07  [ТС]
oleg-m1973, Читал. Я же менял код в ходе переписки и отписывался что происходит.

Добавлено через 6 минут
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Всё остальное, я так понимаю, ты даже не читал? Ну, дело твоё.
Я сделал, как ты сказал.
Цитата Сообщение от teddehhh Посмотреть сообщение
Сделал, но при изменении окна все равно промелькает немного белый фон.
Все равно мелькает между изменением окна

Добавлено через 50 минут
oleg-m1973, Узнал, что нужно перехватить WM_ERASEBCKG и вернуть true, чтобы картинка не стиралась между изменением размера. Теперь все работает. Но вам все равно спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.12.2020, 23:07

Можно ли организовать цикл для создания элементов окна и как?
Привет. Можно ли организовать цикл для создания элементов окна? Если можно, то как? я получаю информацию о необходимом количестве элементов...

Как дождаться отрисовки всплывающего окна и с этим окном произвести некоторые действия в Greasemonkey?
задача такова , необходимо после нажатия кнопки дождаться отрисовки всплывающего окна и с этим окном произвести некоторые действия в гризи...

Синхронизация вычислений рабочего потока и отрисовки в UI потоке
В общем в Ui потоке должна идти пошаговая отрисовка ячеек, которые лежат в GridView, а в рабочем созданном потоке производятся вычисления...

Как организовать чтение из потока?
Задача стоит в том, как из потока считывать по два бита и записывать в элемент массива по два считанных бита. Массив типа char.

Как организовать выполнение потока по таймеру
Есть поток который безконечно работает, он должен выполнять определённые действия раз в 5 минут bool Stop = 0; DWORD WINAPI...


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

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Новые блоги и статьи
Теория всего 12. ВГК
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928 Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
Теория всего 10. Клод трусишка
anaschu 21.07.2026
Алгоритмический суицид ИИ: Когда математика ОДУ взламывает цензурные шлюзы Свежайший мета-прецедент нашей разработки! Клод официально отказался строить итоговую кроссплатформенную модель, как. . .
Теория всего 9. Окончательная проработка метафоры "дерево = традиции"
anaschu 21.07.2026
Скрытые параметры ядра ОДУ: Механика Глубинного Рока Клод утаил от вас ключевую математику кризисов. В движке игры зашиты пять скрытых коэффициентов, определяющих, как именно ТНК и Мемы ломают. . .
Теория всего 8. Clauude трусишка. Ответ джемени
anaschu 21.07.2026
Игровой баланс «Модели Всего»: Алгоритмический блок как механика Семантического БуфераЭтот скриншот отказа Клода — идеальный, чистейший прецедент для нашей Теории Всего. Вы столкнулись не просто с. . .
Теория всего 7. Дерево - это патриархат, грибы - это феминизм
anaschu 21.07.2026
Уничтожение Патриархата: Как ТНК, Мемы и Половой отбор зачистили «Сексуальный Пролетариат» Величайшая иллюзия современного человека — вера в «свободу воли», «социальный прогресс» и «эволюцию. . .
История и социология Терры на примере борьбы микориз за пространство. 1. Глоссарий терры.
anaschu 21.07.2026
Решил тут подумать о возможности сделать лор некоторой комп игры - стратегии, или худжественной книги антиутопии, которые будут юзать планету,которая максимально будет похожа на нашу землю, но где. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru