Форум программистов

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Форум программистов (https://programmersforum.ru/index.php)
-   Visual C++ (https://programmersforum.ru/forumdisplay.php?f=51)
-   -   Программирование графики Windows в Visual C++ (https://programmersforum.ru/showthread.php?t=346674)

jura_k 13.01.2024 09:22

Программирование графики Windows в Visual C++
 
Вложений: 3
Свершилось! 20 лет я ждал этого момента. Теперь я умею рисовать в Windows.
Примеры использования графики показаны ниже.

Код:

/*        p160
 Язык Visual C++ 6.0
        Графика. Рисунки.  */

int d = 0;                //  номер задачи

void CP160View::OnDraw (CDC *pDC)
{
        CP160Doc *pdoc = GetDocument ();
        ASSERT_VALID (pdoc);
        int a, b;

        if (d == 0)
        {
                //  160.56.1
                pDC -> Rectangle (10, 10, 650, 490);
                pDC -> MoveTo (11, 11);
pDC -> LineTo (649, 489);
                pDC -> MoveTo (649, 11);
pDC -> LineTo (11, 489);
                pDC -> Rectangle (50, 50, 300, 300);

                for (a = 83; a > 0; a -= 5)
                        pDC -> Ellipse (110 - a, 110 - a, 110 + a, 110 + a);
        }

        if (d == 1)
        {
                //  92.1.2
                for (a = 0; a < 25; a++)
                        for (b = 0; b < 25; b++)
                                pDC -> SetPixel (5 * a + 30, 5 * b + 30, 0x1111);

                //  93.2.3
                pDC -> Rectangle (100, 100, 300, 300);                //  голова
                pDC -> Ellipse (120, 140, 180, 200);
                pDC -> Ellipse (220, 140, 280, 200);

                pDC -> Ellipse (150, 170, 45, 135);                //  бровь
                pDC -> Ellipse (250, 170, 200, 135);
                pDC -> Ellipse (200, 250, 0, 360);
                pDC -> Rectangle (130, 280, 270, 290);

                pDC -> MoveTo (100, 300);                //  шея
                pDC -> LineTo (50, 350);
                pDC -> LineTo (350, 350);
                pDC -> LineTo (299, 299);

                //  98.5.4
                for (a = 0; a < 9; a++)
                {
                        pDC -> MoveTo (400 + a * 30, 30);
                        pDC -> LineTo (400 + a * 30, 270);
                        pDC -> MoveTo (400, 30 + a * 30);
                        pDC -> LineTo (640, 30 + a * 30);
                }
        }
}

void CP160View::OnChar (UINT nChar, UINT nRepCnt, UINT nFlags)
{
        d++;                //  переход к следующей задаче

        Invalidate ();
        CView::OnChar (nChar, nRepCnt, nFlags);
}

Код:

/*        p31
 Язык Visual C++ 6.0
 Графики функций  */

#include <math.h>

int d = 0;                //  номер графика

void CP31View::OnDraw (CDC *pDC)
{
        CP31Doc *pdoc = GetDocument ();
        ASSERT_VALID (pdoc);
        int a, b, c, j;
        double g, h, i, m;

        if (d == 0)
        {
                //  31.2.1
                pDC -> MoveTo (10, 360);
                pDC -> LineTo (1010, 360);
                pDC -> MoveTo (510, 10);
                pDC -> LineTo (510, 710);

                pDC -> MoveTo (510, 360);
                pDC -> LineTo (160, 10);
                pDC -> MoveTo (510, 360);
                pDC -> LineTo (560, 310);
                pDC -> LineTo (1010, 310);

                //  32.5.2
                pDC -> MoveTo (510, 310);
                pDC -> LineTo (10, 310);
                pDC -> MoveTo (510, 310);
                pDC -> LineTo (560, 360);

                //  33.10.3
                pDC -> MoveTo (560, 210);
                pDC -> LineTo (460, 10);
                pDC -> MoveTo (560, 210);
                pDC -> LineTo (710, 210);
                pDC -> LineTo (810, 10);
        }

        if (d == 1)
        {
                //  45.1.4
                pDC -> MoveTo (10, 360);
                pDC -> LineTo (1010, 360);
                pDC -> MoveTo (510, 10);
                pDC -> LineTo (510, 710);

                for (a = 0; a < 1000; a++)
                {
                        g = (a - 500) / 50.;
                        h = fabs (2 * g + 1) - fabs (3 * g + 7);
                        b = (int) (360 - h * 50);

                        if (a == 0) {c = b; continue;}

                        if (b >= 10  &&  b <= 710  &&  c >= 10  &&  c <= 710)
                        {
                                pDC -> MoveTo (a + 9, c);
                                pDC -> LineTo (a + 10, b);
                        }

                        c = b;
                }

                //  47.3.5
                pDC -> MoveTo (510, 310);
                pDC -> LineTo (1010, 310);
                pDC -> MoveTo (510, 410);
                pDC -> LineTo (10, 410);

                //  46.2.6
                for (a = 0; a < 1000; a++)
                {
                        g = (a - 500) / 50.;
                        g += 1;
                        j = 1;
                        if (g < 0) {g = -g; j = -1;}                //  знак аргумента

                        h = exp (1 / 3. * log (g)) * j;
                        b = (int) (360 - h * 50);
                        if (a == 0) {c = b; continue;}

                        if (b >= 10  &&  b <= 710  &&  c >= 10  &&  c <= 710)
                        {
                                pDC -> MoveTo (a + 9, c);
                                pDC -> LineTo (a + 10, b);
                        }

                        c = b;
                }
        }

        if (d == 2)
        {
                //  51.1.7
                pDC -> MoveTo (10, 360);
                pDC -> LineTo (1010, 360);
                pDC -> MoveTo (510, 10);
                pDC -> LineTo (510, 710);

                pDC -> MoveTo (460, 260);
                pDC -> LineTo (335, 10);
                pDC -> MoveTo (460, 260);
                pDC -> LineTo (560, 260);
                pDC -> LineTo (685, 10);

                //  52.6.8
                for (a = 0; a < 1000; a++)
                {
                        g = (a - 500) / 50.;

                        i = g;                //  член ряда
                        m = g;        //  результат суммирования
                        for (j = 2; j < 10; j += 2)
                        {
                                i *= -g * g / j / (j + 1);
                                m += i;
                        }

                        h = m;        //  результат суммирования ряда разложения синуса
                        b = (int) (360 - h * 50);

                        if (a == 0) {c = b; continue;}

                        if (b >= 10  &&  b <= 710  &&  c >= 10  &&  c <= 710)
                        {
                                pDC -> MoveTo (a + 9, c);
                                pDC -> LineTo (a + 10, b);
                        }

                        c = b;
                }

                for (a = 0; a < 1000; a++)
                {
                        g = (a - 500) / 50.;
                        h = sin (g);
                        b = (int) (360 - h * 50);

                        if (a == 0) {c = b; continue;}

                        if (b >= 10  &&  b <= 710  &&  c >= 10  &&  c <= 710)
                        {
                                pDC -> MoveTo (a + 9, c);
                                pDC -> LineTo (a + 10, b);
                        }

                        c = b;
                }
        }
}

void CP31View::OnChar (UINT nChar, UINT nRepCnt, UINT nFlags)
{
        d++;
        Invalidate ();
        CView::OnChar (nChar, nRepCnt, nFlags);
}


waleri 13.01.2024 15:57

Я описался от восторга!

Алексей1153 14.01.2024 06:34

jura_k, за 20 лет - вот это? Нуу, надо ускоряться. Надо :D

столько ещё предстоит изучить!

Цитата:

Сообщение от jura_k (Сообщение 1864413)
Теперь я умею рисовать в Windows

а тут ты просто узнал некоторые (из тысячи) функций MFC::CDC (WINAPI::HDC).

И студию по меньшей мере 2022 уже поставь. Над шестёркой даже старперы уже смеются

jura_k 14.01.2024 09:40

Не нашел учебник, где это описано. Пришлось изобретать самому. И догадываться, что это такое.
Там же ведь объекты?

jura_k 14.01.2024 09:42

Цитата:

Сообщение от Алексей1153 (Сообщение 1864421)
И студию по меньшей мере 2022 уже поставь. Над шестёркой даже старперы уже смеются

А там какие системные требования к компьютерному железу? А к операционной системе?
А там есть программирование под 64-битную Windows?

p51x 14.01.2024 09:44

Цитата:

Сообщение от jura_k (Сообщение 1864423)
А там какие системные требования к компьютерному железу? А к операционной системе?

10ка и выше

Цитата:

Сообщение от jura_k (Сообщение 1864423)
А там есть программирование под 64-битную Windows?

В наше вермя надо спрашивать - осталось ли там программирование под 32х битные windows?.. Проснитесь, 2024 на дворе.

Алексей1153 14.01.2024 10:25

Цитата:

Сообщение от jura_k (Сообщение 1864422)
Не нашел учебник, где это описано

в интернете можно найти за пару секунд
для MFC https://learn.microsoft.com/en-us/cp...?view=msvc-170
для WINAPI https://learn.microsoft.com/en-us/wi...text-functions

Цитата:

Сообщение от jura_k (Сообщение 1864423)
А там есть программирование под 64-битную Windows?

там всё есть

требования к компу - приличные. Комп для программиста тоже должен быть не рухлядь, иначе всё будет очень долго изучаться

jura_k 14.01.2024 19:08

Вот это тот самый Help, которого у меня не было. Меня не учили программированию с 1996-го года.

ugo 19.01.2024 20:39

Цитата:

Сообщение от Алексей1153 (Сообщение 1864421)
И студию по меньшей мере 2022 уже поставь. Над шестёркой даже старперы уже смеются

Я программирую с помощью инструментов т.к. Tasm, Borland и Visual Studio (версии 6.0) выпущеными в прошлом веке. Делаю программы под Dos и Windows. Меня всё устраивает, переходить на монстро-образное не собираюсь. Вдобавок, переходить нужно на лицензионное, а по другом, вы - ботнет (с торрентов)!

p51x 19.01.2024 20:57

ugo, надеюсь вы это делаете MS-DOS...


20:56.