Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
7 / 7 / 0
Регистрация: 08.11.2010
Сообщений: 26

Сворачивание-разворачивание окон

16.11.2010, 21:57. Показов 2612. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. С Visual C++ Общаюсь недавно, так что сразу прошу прощения за глупый вопрос.
Создаю проект в MFC AppWizard(exe). Программа большая,с окончательным результатом в виде графики в окне StaticText. Работает прекрасно,но...
Вопрос следующий: необходимо добавить возможность сворачивания-разворачивания окна, чтобы вместе с этим соответственно график масштабировался,т.е. например "разворачивался".
Добавила кнопки разворачивания и сворачивания окна через Dialog Properties (у меня VS 6.0).
Но остается проблема с тем, при разворачивании окна график остается прежним.Как сделать так,чтобы рисунок масштабировался соответственно размеру окна?
К сожалению,примеров не могу найти в интернете.
Я так понимаю,что все действия при разворачивании окна будут в OnPaint().
Вот код моего OnPaint(). Здесь уже добавлено,чтобы при сворачивании и дальнейшем разворачивании окна график не исчезал.График рисуется при нажатии на кнопку 1,там же считаются все параметры.
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
void CDashaDlg::OnPaint() 
{
    if (IsIconic())
    {
        CPaintDC dc(this); // device context for painting
 
        SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
 
        // Center icon in client rectangle
        int cxIcon = GetSystemMetrics(SM_CXICON);
        int cyIcon = GetSystemMetrics(SM_CYICON);
        CRect rect;
        GetClientRect(&rect);
        int x = (rect.Width() - cxIcon + 1) / 2;
        int y = (rect.Height() - cyIcon + 1) / 2;
 
        // Draw the icon
        dc.DrawIcon(x, y, m_hIcon);
        mCanDraw=1;
    
    }
    else
    {
        CDialog::OnPaint();
    if(mCanDraw==0)
    {
    
CClientDC MyDC(GetDlgItem(IDC_STATIC1)); 
//определение объекта класса CClientDC в элементе диалога  "Static text"
CRect Rect;  // Объявление объекта класса CRect
CWnd *pWnd = MyDC.GetWindow();  
//определение указателя на окно, которое занимает элемент диалога "Static text"
pWnd->GetClientRect( &Rect ); 
        CPen Pen(PS_SOLID, 2, RGB(0,0,255)); // инициализация пера
MyDC.SelectObject(&Pen); // выбор пера
MyDC.Ellipse( k1, p1, m1, n1 );
MyDC.Ellipse( k2, p2, m2, n2 );
MyDC.Arc( k0, p0, m0, n0, a, b, c, d ); 
    
    }
    }
}
Пожалуйста,покажите на примере как можно реализовать данную проблему в контексте моей программы.Заранее огромное спасибо

Добавлено через 20 часов 46 минут
Спасибо всем,разобралась)

Добавлено через 44 минуты
Если кому понадобится,мой вариант:
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
void ProgaDlg::OnPaint() 
{   if (IsIconic())
    {
        CPaintDC dc(this); // device context for painting
 
        SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
 
        // Center icon in client rectangle
        int cxIcon = GetSystemMetrics(SM_CXICON);
        int cyIcon = GetSystemMetrics(SM_CYICON);
        CRect rect;
        GetClientRect(&rect);
        int x = (rect.Width() - cxIcon + 1) / 2;
        int y = (rect.Height() - cyIcon + 1) / 2;
 
        // Draw the icon
        dc.DrawIcon(x, y, m_hIcon);
    }
    else
    {
        CDialog::OnPaint();
 
        if(mCanDraw)
        {
            CClientDC dc(GetDlgItem(IDC_STATIC1)); 
            //определение объекта класса CClientDC в элементе диалога  "Static text"
            CRect lRect;  // Объявление объекта класса CRect
            CWnd *pWnd = dc.GetWindow();
            //определение указателя на окно, которое занимает элемент диалога "Static text"
            pWnd->GetClientRect( &lRect ); 
    static const int mX0 = 368;
    static const int mY0 = 276;
            double lDX = (double)lRect.Width() / (double)mX0;
            double lDY = (double)lRect.Height() / (double)mY0;
 
            CPen Pen(PS_SOLID, 2, RGB(0,0,255)); // инициализация пера
            CPen* lPen = dc.SelectObject(&Pen); // выбор пера
 
            dc.Ellipse(k1 * lDX, p1 * lDY, m1 * lDX, n1 * lDY);
            dc.Ellipse(k2 * lDX, p2 * lDY, m2 * lDX, n2 * lDY);
            dc.Arc(k0 * lDX, p0 * lDY, m0 * lDX, n0 * lDY, a * lDX, b * lDY, c * lDX, d * lDY);
 
            dc.SelectObject(lPen);
        }
    }
 
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void ProgaDlg::OnSize(UINT nType, int cx, int cy)
{
    CDialog::OnSize(nType, cx, cy);
    
    if(IsWindow(mDrawField.GetSafeHwnd()))
    {
        CRect lRect;
        mDrawField.GetWindowRect(&lRect);
        ScreenToClient(&lRect);
        cx -= 116;
        cy -= 51;
 
        mDrawField.MoveWindow(lRect.left, lRect.top, cx, cy, TRUE);
    }
}
 
void ProgaDlg::OnGetMinMaxInfo(MINMAXINFO* lpMMI)
{
    lpMMI->ptMinTrackSize = CPoint(500,300);
 
    CDialog::OnGetMinMaxInfo(lpMMI);
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.11.2010, 21:57
Ответы с готовыми решениями:

Сворачивание и разворачивание окон
Привет, подскажите пожалуйста, почему при сворачивании/разворачивании форм через панель задач, после 3-4 раза, появляется главная форма...

Сворачивание и разворачивание окон
Здравствуйте!!! Мне нужно вывести на экран три окна. Щелчок левой кнопкой в правой половине любого окна приводит к свертке в...

Сворачивание и разворачивание окон
У меня есть главная форма, есть несколько дочерних. В главной я кнопкой выбираю дочернюю, она открывается Show, главная скрывается Hide....

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.11.2010, 21:57
Помогаю со студенческими работами здесь

Сворачивание и разворачивание Grid
Господа, сбацал тут намедни метод, позволяющий сворачивать Grid как таблицу в заголовок. То есть при нажатии на первую строку грида все его...

Сворачивание/разворачивание блока на JS
Имеется блок новости, в котором вмещается "текст новости" и ниже присутствует кнопка "читать полностью", так вот при её нажатии...

Сворачивание/разворачивание приложений
Доброго времени, необходимо выводить на экран окно по определенному заголовку. Все окна будут наложены друг на друга, по необходимости...

Сворачивание / разворачивание текста
Подскажите как скрыть текст, тобишь текста много и нужно скрыть его и сделать крестик который бы разворачивал его?

Сворачивание/разворачивание формы
Возникла небольшая проблема при сворачивании/разворачивании формы. Дело в том, что в программе открытие рабочей формы предшествует...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru