Member 12533122 Ответов: 2

Как я могу очистить чертежи, выполненные cclientdc?


Здравствуйте люди,
я делаю рисунки на dialof в MFC vc++.

я рисую линии в соответствии с различными входными сигналами, которые я получаю от последовательного канала.

теперь я хочу очистить чертежи, когда получу еще один ввод.

Что я уже пробовал:

CClientDC dc(GetDlgItem(IDC_STATICDISPLAY));

CPen lDot(PS_DASH, 2, RGB(255, 255, 255));

dc.SelectObject(&lDot);
	dc.Rectangle(a,b,c,d);

Здесь a,b,c,d-это мои различные входы, которые я получаю от последовательной связи.
на каждом входе я хочу очистить старые чертежи и нарисовать новые линии с новыми данными.

И
GetDlgItem(IDC_STATICDISPLAY)
это групповое поле, в котором я рисую линии в диалоговом окне.

2 Ответов

Рейтинг:
0

Rick York

GetDlgItem(IDC_STATICDISPLAY)->Invalidate( true );

Это приведет к тому, что групповое поле будет стерто и перерисовано. Стирание означает, что для элемента управления будет нарисован фон по умолчанию.


Member 12533122

GetDlgItem(IDC_STATICDISPLAY)->Invalidate( true );

ЭТО НЕ РАБОТАЕТ. это все еще не ясно старый рисунок.

Jochen Arndt

Вызов GetDlgItem(IDC_STATICDISPLAY)->UpdateWindow() после этого форсировать перерисовку.

Рейтинг:
0

KarstenK

Если элемент управления полностью нарисован владельцем, то вы должны использовать FillRect с вашим цветом bckground при первом вызове draw.

И я бы предложил вам хранить Windows-дескриптор элемента управления и другие постоянные объекты (например, перо) в качестве переменных-членов для повышения производительности.


Member 12533122

я сделал то же самое для временного. я рисую прямую линию с фоновым цветом, а затем рисую линии.
так происходит каждый раз, когда я сначала рисую пустую прямую кишку, а затем рисую на ней линии.

пока это мне помогает.