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

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

12.01.2012, 16:00. Показов 6653. Ответов 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
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852
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
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852
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
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852
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
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru