Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/35: Рейтинг темы: голосов - 35, средняя оценка - 4.86
1 / 1 / 0
Регистрация: 08.05.2011
Сообщений: 18

Работа в MFC. Обновление окна.

12.01.2012, 16:00. Показов 6770. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня в функции OnDraw() отрисовывается куб. По нажатию мыши нужно чтобы этот куб стирался и рисовался новый куб с другими сторонами. С помощью каких функций можно очищать экран?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.01.2012, 16:00
Ответы с готовыми решениями:

MFC обновление окна
Привет всем. Пишу программу с ипользованием MFC, но есть проблемка. Когда что-то нарисую( например, на клавишу 1 рисуется квадрат, а на...

Обновление окна в MFC
Доброго времени суток, уважаемые. Хотел бы попросить у вас совета в написании программы. Программа должна симулировать вращение двух...

Работа с MFC: Как создать дочерние окна?
Есть некоторые вопросы по этой библиотеке..... 1 Как создать дочерние окна ?

6
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
12.01.2012, 17:27
в обработчике нажатия кнопки мыши
Invalidate(TRUE) со стиранием
Invalidate(FALSE) без стирания
но для плавной анимации (чтобы не было видно перерисовки) используй двойную буферизацию

Добавлено через 2 минуты
Цитата Сообщение от mirh Посмотреть сообщение
С помощью каких функций можно очищать экран?
самое простое в OnDraw() нарисовать прямоугольник с цветом фона и размером с окно
0
1 / 1 / 0
Регистрация: 08.05.2011
Сообщений: 18
12.01.2012, 19:09  [ТС]
Для проверки я решил сначала просто очищать окно, вот код
C++
1
2
3
4
5
6
afx_msg void Ctest1View::OnLButtonDown (UINT nFlags, CPoint point )
{
    Invalidate ();
 
    UpdateWindow();
}
не работает, что делать
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
12.01.2012, 20:51
Цитата Сообщение от mirh Посмотреть сообщение
Для проверки я решил сначала просто очищать окно,
ну и где очистка???
Invalidate() Делает недействительной всю поверхность элемента управления и вызывает его перерисовку.
Функция UpdateWindow() обновляет клиентскую область указанного окна, посылая WM_PAINT сообщение к окну. Функция посылает WM_PAINT сообщение непосредственно процедуре указанного окна, обходя прикладную очередь.
это лишний вызов
в любом случае тебе посылается WM_PAINT отрабатывать(стирать) будет твой OnDraw()
повторюсь для стирания
Цитата Сообщение от ValeryS Посмотреть сообщение
самое простое в OnDraw() нарисовать прямоугольник с цветом фона и размером с окно
Добавлено через 2 минуты
для Invalidate
void Invalidate( BOOL bErase = TRUE );

Параметры
bErase
Определяет, должен ли фон внутри области модификации быть уничтожен.

Замечания
Объявляет неверным всю клиентскую область CWnd. Клиентская область отмечена для закрашивания, когда следующее WM_PAINT сообщение происходит. Область может также быть утверждена прежде, чем WM_PAINT сообщение происходит методом ValidateRect или ValidateRgn.
bErase параметр определяет, должен ли фон внутри области модификации быть уничтожен, когда область модификации обработана. Если bErase TRUE фон уничтожен, когда метод BeginPaint вызывается, если bErase FALSE, фон остается неизменяемым. Если bErase TRUE для любой части области модификации, фон во всей области, не только в данной части, уничтожен.
Windows посылает WM_PAINT сообщение всякий раз, когда область модификации CWnd не пуста и не имеется никаких других сообщений в очереди приложений для того окна.
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
12.01.2012, 22:24
Цитата Сообщение от mirh Посмотреть сообщение
У меня в функции OnDraw() отрисовывается куб. По нажатию мыши нужно чтобы этот куб стирался и рисовался новый куб с другими сторонами. С помощью каких функций можно очищать экран?
- как вариант делайте отрисовку в OnTimer, посмотрите как я перерисовывал эллипс в этом топике
готовый экзешнник здесь
готовый проект здесь

Добавлено через 3 минуты

Не по теме:

ValeryS, я вижу ты API-шник вроде толковый, помоги т.к. я больше MFC использую столкнулся с проблеммой как правильно организовать работу DialogBox в WinMain(я хочу работать с rc-шником ресурсов из него окно строить а не рисовать контролы посредством CreateWindow(Ex)). Уже часа два ковыряюсь:(

0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
12.01.2012, 22:56

Не по теме:

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
ValeryS, я вижу ты API-шник вроде толковый, помоги т.к. я больше MFC
ну я тоже больше в нем (MFC) сижу
чем оно тебя не устраивает (типа приложение диалоговое окно ??)
или что то я не понял???
создай отдельную тему( а то как бы нас не погнали:( )
и опиши подробно чего надо сделать???



Добавлено через 22 минуты
-=ЮрА=-,
давай сюда
Dialog в WinMain
1
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
12.01.2012, 23:22
ValeryS, я читал mfcfirststeps , но спасибо за реакцию!
Это всё равно не работает
Код
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
BOOL CALLBACK MainProc(HWND,UINT,WPARAM,LPARAM);
 
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
    // TODO: Place code here.
    hThisInstance =  hInstance;
    DialogBox
    (
        hThisInstance, 
        MAKEINTRESOURCE(MnWnd),
        NULL,
        &MainProc
    );
    return 0;
}
 
BOOL CALLBACK MainProc(HWND hw,UINT msg,WPARAM wp,LPARAM lp) 
{
    BOOL bRet = TRUE;
    DWORD OldIcon=0;            /* id старой иконки диалога */
    BOOL isCOMMAAND = FALSE;
    switch (msg) 
    {
        case WM_INITDIALOG:     /* меняем иконку диалога */
            OldIcon=SetClassLong
            (
                hw,
                GCL_HICON,
                (long)LoadIcon(hThisInstance,MAKEINTRESOURCE(MyIcon))
            );
            break;
        case WM_COMMAND:
            isCOMMAAND = TRUE;
            break;
        case WM_DESTROY:          /* при закрытии окна восстанавливаем старую иконку */
            SetClassLong(hw,GCL_HICON,(long)OldIcon);
            PostQuitMessage(0);
            break;
    };
    if(isCOMMAAND)
    switch(LOWORD(wp))
    {
        case ID_OPEN:          /* команда меню "Открыть" */
            break;
        case ID_ABOUT:         /* команда меню "About" */
             MessageBox
                (
                     hw,
                     _T("Асинхронный доступ к файлам"),
                     _T("О программе..."),
                     MB_OK|MB_ICONINFORMATION
                 );
             break;
        case IDCANCEL:          /* посылается при закрытии диалога по [Esc]*/
        case ID_EXIT:          /* команда меню "ВЫход" */
            EndDialog(hw,NULL);
            //DestroyWindow(hw);
            break;
    };
 
    return bRet;
}


ValeryS, хотя я толком твой код не смотрел, сейчас займусь
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.01.2012, 23:22
Помогаю со студенческими работами здесь

Автоматическое обновление экрана (MFC)
Как реализовать в MFC??Рисую прямоугольники и меняю цвет...но обновляю с помощью кнопки...а как без нее???

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

MFC закрытие окна
Здравствуйте! Как можно закрыть окно по нажатию на кнопку (VS, MFC)?

Диалоговые окна в MFC
Всем привет. Хотел спросить, как в MFC выводить новые окна, допустим есть стандартное окно IDD_DIT_DIALOG я хочу чтобы при нажатие...

Очистка окна в MFC
У меня программа тест. И после того как ответил на вопрос должно появляться другое задание, а как очистить окно от предыдущего задания?


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита табличной части. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru