Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.70/37: Рейтинг темы: голосов - 37, средняя оценка - 4.70
 Аватар для Norby
66 / 66 / 5
Регистрация: 12.03.2008
Сообщений: 392

MFC Перерисовка окна

09.10.2009, 23:34. Показов 7300. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
На форме есть CStatic. Создаю CImage, гружу в него картинку, вывожу в CStatic. При перекрытии окна картинка в CStatic'e затирается. Как сделать перерисовку в таком случае и куда ее вписать? В обработчик WM_MOVE формы?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.10.2009, 23:34
Ответы с готовыми решениями:

Перерисовка окна MFC
Добрый день. Подскажите, как и где организовать перерисовку окна? Invalidate(); UpdateWindow(); Эти функции, как понимаю, и...

MFC, диалог, перерисовка...
Всем доброго времени суток! Имеем следующее: приложение на МФС, по кнопке меню открываем модальный диалог, ставим в эдите кол-во рисуемых...

Перерисовка Edit control, смена фона на другой цвет (MFC)
Здравствуйте, уважаемые Дамы и Господа. Задаю вам вопрос, так как сам уже перегугли и перепробывал всё что мог, чтобы победить данную...

19
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
10.10.2009, 11:52
перегрузи OnDraw в своем CStatic.
0
 Аватар для Norby
66 / 66 / 5
Регистрация: 12.03.2008
Сообщений: 392
10.10.2009, 12:55  [ТС]
Цитата Сообщение от Patch Посмотреть сообщение
перегрузи OnDraw в своем CStatic.
Что-то я не наблюдаю у CStatic метода OnDraw.
0
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
10.10.2009, 13:20
его там и нет.
я в таком случае создаю объект CWnd и привязываю его к Static элементу управления.
вроде еще можно делать СStatic::SetBitmap( HBITMAP hBitmap ), но я таким методом никогда не пользовался.
0
 Аватар для Norby
66 / 66 / 5
Регистрация: 12.03.2008
Сообщений: 392
10.10.2009, 13:46  [ТС]
Цитата Сообщение от Patch Посмотреть сообщение
его там и нет.
я в таком случае создаю объект CWnd и привязываю его к Static элементу управления.
А поподробней можно? Как именно сделать привязку?
0
 Аватар для counter
2 / 2 / 2
Регистрация: 27.09.2009
Сообщений: 15
10.10.2009, 14:55
а если перегрузить CStatic::OnPaint() ?
0
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
10.10.2009, 16:48
Цитата Сообщение от Norby Посмотреть сообщение
А поподробней можно? Как именно сделать привязку?
Как и любого CWnd окна.
Делаешь свой класс на базе CWnd.
В основной программе создаешь объект этого класса, и после создания диалога, делаешь Attach().
примерно так:
C++
1
2
CMyWnd mywnd;
mywnd.Attach(GetDlgItem(...));
0
 Аватар для Norby
66 / 66 / 5
Регистрация: 12.03.2008
Сообщений: 392
10.10.2009, 17:08  [ТС]
Цитата Сообщение от counter Посмотреть сообщение
а если перегрузить CStatic::OnPaint() ?
Пишу так
C++
1
2
3
4
CStatic::OnPaint()
{
...
}
Выдает ошибку:
error C2509: OnPaint: функция-член не объявлена в 'CStatic'

Добавлено через 5 минут
Цитата Сообщение от Patch Посмотреть сообщение
Как и любого CWnd окна.
Делаешь свой класс на базе CWnd.
В основной программе создаешь объект этого класса, и после создания диалога, делаешь Attach().
примерно так:
C++
1
2
CMyWnd mywnd;
mywnd.Attach(GetDlgItem(...));
Так, че то я не понял. Зачем свой класс? У меня объект на форме CStatic и есть переменная связанная с ним. Какой еще класс туда приплести?
0
 Аватар для counter
2 / 2 / 2
Регистрация: 27.09.2009
Сообщений: 15
10.10.2009, 17:10
я создавал свой класс, наследовал CStatic и уже в своем классе перегружал OnPaint
0
 Аватар для Norby
66 / 66 / 5
Регистрация: 12.03.2008
Сообщений: 392
10.10.2009, 18:38  [ТС]
Цитата Сообщение от counter Посмотреть сообщение
я создавал свой класс, наследовал CStatic и уже в своем классе перегружал OnPaint
В перегруженном методе что у тебя было? Твоя процедура отрисовки в CStatic? Если да, то мне такой вариант не подходит, т.к. функция отрисовки довольно тяжелая. Будет тормозить. Я знаю, что система как то следит за "поврежденными" участками формы и умеет их восстановить, причем перерисовывает только "поврежденную" область. За счет этого работает быстро. А вот как это сделать в MFC я не знаю.
0
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
10.10.2009, 18:52
Цитата Сообщение от Norby Посмотреть сообщение
На форме есть CStatic. Создаю CImage, гружу в него картинку, вывожу в CStatic. При перекрытии окна картинка в CStatic'e затирается.
приведи код ф-ии (с названием и принадлежностью), в которой это проделывается.
0
 Аватар для Norby
66 / 66 / 5
Регистрация: 12.03.2008
Сообщений: 392
10.10.2009, 19:45  [ТС]
Цитата Сообщение от novi4ok Посмотреть сообщение
приведи код ф-ии (с названием и принадлежностью), в которой это проделывается.
Ну вобще-то оно у меня не в одной функции. Прога для учебы и к ней свои требования, но если сокращенно то грузится она так:
C++
1
2
3
CImage img;
img.Load(path);
image.SetBitmap(img);
path - путь к картинке, image - переменная связанная с моим CStatic. Все это дело предваряется диалогом открытия файла по щелчку на кнопке.
0
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
10.10.2009, 20:42
это "ATL"-приложение? или что такое CImage? и что такое image? ты пишешь "image - переменная связанная с моим CStatic". что такое твой CStatic, и какого типа переменная image?
0
 Аватар для Norby
66 / 66 / 5
Регистрация: 12.03.2008
Сообщений: 392
10.10.2009, 22:18  [ТС]
Цитата Сообщение от novi4ok Посмотреть сообщение
это "ATL"-приложение? или что такое CImage? и что такое image? ты пишешь "image - переменная связанная с моим CStatic". что такое твой CStatic, и какого типа переменная image?
В студии есть такая вещь. Создается на форме CStatic, задается его id, потом клацаем по нему правой кнопкой мыши и там Add Variable... Там и вписываем имя переменной, которая будет связана с этим CStatic. Я выбрал имя image. И ATL я использую только для загрузки и сохранения изображения через класс CImage.
0
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
11.10.2009, 08:13
Цитата Сообщение от Norby Посмотреть сообщение
Я знаю, что система как то следит за "поврежденными" участками формы и умеет их восстановить, причем перерисовывает только "поврежденную" область. За счет этого работает быстро.
Не система. Это приложение делает. ТВОЕ приложение.
Для быстрого вывода можно сделать образ в памяти, и в функции OnDraw только выводить на экран.
А если ты картинку не переопределяешь - ну приделай ее в редакторе диалогов. Там можно к Static сразу картинку прицепить.
0
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
11.10.2009, 15:50
Цитата Сообщение от Norby Посмотреть сообщение
В студии есть такая вещь. Создается на форме CStatic, задается его id, потом клацаем по нему правой кнопкой мыши и там Add Variable... Там и вписываем имя переменной, которая будет связана с этим CStatic. Я выбрал имя image. И ATL я использую только для загрузки и сохранения изображения через класс CImage.
класс MFC CStatic не имеет перегруженной ф-и SetBitmap, которая бы принимала в качестве параметра объект типа CImage.

какая у тебя студия? какова цель? если просто в диалоге картинку иметь, то для этого в редакторе ресурсов нужно выбрать не "Static text", a "Picture control", там же в ресурсах добавить битмап, и в редакторе же ресурсов указать Type для этой картинки - Bitmap, и выбрать в качестве Image нужную картинку. все. и не нужно создавать переменных для этого элемента, и привлекать только по этому поводу ATL и еще что-то переписывать для перерисовок. все будет отображаться "автоматически".
0
 Аватар для Norby
66 / 66 / 5
Регистрация: 12.03.2008
Сообщений: 392
11.10.2009, 20:22  [ТС]
Цитата Сообщение от novi4ok Посмотреть сообщение
класс MFC CStatic не имеет перегруженной ф-и SetBitmap, которая бы принимала в качестве параметра объект типа CImage.

какая у тебя студия? какова цель? если просто в диалоге картинку иметь, то для этого в редакторе ресурсов нужно выбрать не "Static text", a "Picture control", там же в ресурсах добавить битмап, и в редакторе же ресурсов указать Type для этой картинки - Bitmap, и выбрать в качестве Image нужную картинку. все. и не нужно создавать переменных для этого элемента, и привлекать только по этому поводу ATL и еще что-то переписывать для перерисовок. все будет отображаться "автоматически".
Ну оно и так PictureControl. Но переменная то с ним связанная создается типа CStatic. И у нее есть метод SetBitmap. Студия 2008. Картинку я динамически изменяю. Прога является графическим редактором. Поэтому вариант с ресурсом не подходит.
0
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
12.10.2009, 00:13
Цитата Сообщение от Norby Посмотреть сообщение
Ну оно и так PictureControl. Но переменная то с ним связанная создается типа CStatic. И у нее есть метод SetBitmap. Студия 2008. Картинку я динамически изменяю. Прога является графическим редактором. Поэтому вариант с ресурсом не подходит.
ясно. когда-то делал похожую задачку, и тоже в MFC. если нужно, могу поискать, поубирать мое специфическое и выложить. или не все, а что тебе нужно.
принцип такой: создается класс, производный от CStatic, в нем заводится хэндл битмапа, который при изменении картинки инициализируется, и у этого класса переписывается OnPaint(). при прорисовке на контексте рисуется эта картинка.
переменная создается не CStatic типа, а типа нашего производного класса.
0
0 / 0 / 0
Регистрация: 10.10.2009
Сообщений: 26
12.10.2009, 01:16
a vmesto etovo mojno i picturebox ne uzat...a prsto gruzit v OZU kartinu poluchit ruchku..i prosto risovat ee..u tya s picturebox vsegda budut problemmi..
0
 Аватар для Norby
66 / 66 / 5
Регистрация: 12.03.2008
Сообщений: 392
12.10.2009, 15:05  [ТС]
Короче, пошел простым путем, в OnPaint моей формы добавил вывод картинки на экран вызовом моей функции отрисовки. Торомозит, но работает. Вобщем пойдет. Всем спасибо за помощь.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.10.2009, 15:05
Помогаю со студенческими работами здесь

Перерисовка окна
Я понимаю, что эта тема уже избита. При программировании окон непосредственно через API программист сам должен следить за перерисовкой...

Перерисовка окна по нажатию кнопки
Как сделать так, чтобы окно полностью перерисовывалось по нажатию на кнопку? (прога под MFC)

Перерисовка окна или переменная из диалога в окно
Всем привет! Вообщем такая проблема, перерыл весь интернет, но ничего похожего не нашел, если что-то недоглядел, то простите) Создается...

Окна в MFC
Интересует вопрос: каким образом (если это вообще возможно) в mfc можно создать окно вида, ну скажем такого: Подскжите примерный...

MFC отрисовка окна
Привет. В MFC для MDI существует метод OnDraw для отрисовки окна. Но этот метод вызывается только при определенных событиях (свертывание,...


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

Или воспользуйтесь поиском по форуму:
20
Закрытая тема Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru