![]() |
Удаление рисунка
Всем привет!
Вот есть простенький код рисования (MFC): void CkkkvvvaaaDlg::OnBnClickedButton1() { CClientDC dc(this); CPen p(0,2,RGB(255,0,0)); CBrush b(RGB(0,255,0)); dc.SelectObject(p); dc.SelectObject(b); dc.Rectangle(10,10,500,500); } но почемуто если этот зелёный квадрат перекрыть другим окном то перекрытая часть удалится. (если перекрыть полностью - то и удалится полностью). Как этого избежать? |
Ответ: Удаление рисунка
ээээ... а ты дописал необходимое в обработчик события WM_PAINT?
прога должна знать, откуда ей брать информацию, после того как часть окна бала стёрта вышележащим. апд почитай для начал Скисова, если так хочешь МФЦ. Про кодогенераторы забудь навремя - чего не понимают, тем не владеют (с)Гёте |
Ответ: Удаление рисунка
Цитата:
|
Ответ: Удаление рисунка
Цитата:
|
Ответ: Удаление рисунка
Цитата:
|
Ответ: Удаление рисунка
ты пропускаешь реализацию за терминами "что-то", а телепаты в отпуску..
|
Ответ: Удаление рисунка
Код:
POINT a={10,10},b={510,10},c={510,510},d={10,510},ad; Когда всё дорисуется, если рисунок закрыть другим окном, то та закрытая часть сотрётся. Что делать? |
Ответ: Удаление рисунка
надо дописать необходимое в обработчик события WM_PAINT
|
Ответ: Удаление рисунка
Цитата:
Код:
void CkvadratDlg::OnPaint() |
Ответ: Удаление рисунка
WM_PAINT отрисовывает текущий контент. Введи переменную - флаг, означающую нажатие кнопки, а дальше так:
PHP код:
|
Ответ: Удаление рисунка
да. здесь заведи реацию на флаг.
флаг поднимай при нажатии кнопки. если флаг поднят, то рисуешь что-то там из поста №7 |
Ответ: Удаление рисунка
Всё бы ничего, да в MFC нет даже строчки case WM_PAINT:
Есть только функция OnPaint(). Можно конешно добавить код из поста №7 туда, но в коде из поста №7 можно увидеть строчку Sleep(100); . Это получается что каждый раз при отресовки окна, прога будет "спать" 100*7 = 700 милесикунд ! Как быть при этом? |
Ответ: Удаление рисунка
Ну для этого надо создать таймер, который будет каждые 100 мс делать вызов OnPaint. В Net перерисовка формы вызывается функцией Invalidate. Поищи, может тоже самое есть и в MFC.
|
Ответ: Удаление рисунка
Цитата:
---------------------- А вот если отказатся от Sleep(100); да ещё в функции обработки кнопки написать this->OnPaint(); то тогда всё фурычит! |
Ответ: Удаление рисунка
А вот что я придумал, но незнаю как сделать:
При каждом нажатии на кнопку выполнять код рисования, а сам рисунок CClientDC dc(this); сохранить как нибуть в переменую какую нибуть графическую. А потом в WM_PAINT (OnPain) просто отрисовывать эту переменую. Вот что я не могу сделать: 1) как CClientDC dc сохранить в какую нибуть графическую переменую. 2) как нарисивать данную переменую. |
Ответ: Удаление рисунка
По-моему, тебе теорию читать надо перед сном до полного понимая, а не наобум клавиши тыкать.
|
Ответ: Удаление рисунка
Цитата:
|
Ответ: Удаление рисунка
Код:
#include<afxwin.h> |
Ответ: Удаление рисунка
Цитата:
А вообще кто его знает зачем он Sleep(100) использовал. Может он игру на GDI хочет написать, он же об этом не упомянул :pardon: |
Ответ: Удаление рисунка
Цитата:
|
Часовой пояс GMT +4, время: 10:08. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot