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

MFC приложение

14.01.2019, 16:03. Показов 4360. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
Нужно разработать приложение на основе MFC, вычисляющее длину третьей стороны треугольника на основе введенных двух сторон. В случае некорректно введенных значений переменных программа должна выдавать предупреждение.

Из моих наработок и идей, как хотелось бы воплотить программу:
Вычисление не введенной стороны с помощью теоремы Пифагора.
3 Edit Box'a, при вводе двух аргументов вычислялся неизвестный третий.

Если грубо говоря, то примерно так (при нажатии на кнопку рассчитать):
C++
1
2
3
4
5
6
7
8
9
10
11
void CMFCApplication4Dlg::OnBnClickedOk()
{
    UpdateData(1);   //Получить данные из редакторов
    if (A>0, B>0)
        C = sqrt(A*A + B*B);
    if (C > 0, B > 0)
        A = sqrt(C*C - B * B);
    if (C > 0, A > 0)
        B = sqrt(C*C - A * A);
    UpdateData(0);   //Вывести данные в редакторы 
}
Вопросы по программе:
1. Как сделать, чтобы при запуске в окошках не было значений (у меня изначально пишутся 0)
2. Как сделать, чтобы при записи любой переменной меньшей или равной 0 появлялось окошко с предупреждением.
3. Немного (хотя там много) подредактировать программу.

Заранее благодарю за помощь.

В приложениях само окно программы и тип переменных, который я указал.
Миниатюры
MFC приложение   MFC приложение  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.01.2019, 16:03
Ответы с готовыми решениями:

Приложение MFC
Разработка приложения для предметной области «» с применением языка программирования С++ и с использованием библиотеки MFC. У меня тут...

MFC приложение
Всем доброго времени суток ... есть MS Visual Studio .NET 2003, в нем - MFC solution (решение), состоящее из нескольких project (проектов)...

Приложение MFC и dll
Всем привет! Не могу разобраться, как к приложению mfc на базе диалоговых окон подключить библиотеку dll, написанную в Visual C++ 6.0....

7
60 / 45 / 15
Регистрация: 06.03.2018
Сообщений: 202
14.01.2019, 16:20
ZekeF,
Цитата Сообщение от ZekeF Посмотреть сообщение
Как сделать, чтобы при запуске в окошках не было значений (у меня изначально пишутся 0)
вводи строку.
Цитата Сообщение от ZekeF Посмотреть сообщение
Как сделать, чтобы при записи любой переменной меньшей или равной 0 появлялось окошко с предупреждением.
используй EN_СHANGE для анализа введенной информации
Цитата Сообщение от ZekeF Посмотреть сообщение
вычисляющее длину третьей стороны треугольника на основе введенных двух сторон
Прямоугольного только?
0
0 / 0 / 0
Регистрация: 01.12.2018
Сообщений: 17
14.01.2019, 16:40  [ТС]
Можно немного по-подробнее про избавление от нулей, пожалуйста?

Скорее всего прямоугольного, ибо в задании не говорится о вводе угла.
0
60 / 45 / 15
Регистрация: 06.03.2018
Сообщений: 202
14.01.2019, 16:51
Цитата Сообщение от ZekeF Посмотреть сообщение
Можно немного по-подробнее про избавление от нулей, пожалуйста?
Вам это принципиально?
Насколько я знаю, если привязывать контрол к численным переменным то ноль будет всегда. (могу ошибаться...)
Если привязать к строке то нуля не будет точно. Но в этом случае нужно контролировать вводимые данные, чтобы пользователь вместо числа не ввел какую нибудь абракадабру.

У Вас это что? Школьное задание? Если вы полезете в дебри преподаватель ничего не заподозрит?
0
0 / 0 / 0
Регистрация: 01.12.2018
Сообщений: 17
14.01.2019, 16:57  [ТС]
Не принципиально. У меня такая вышка, преподаватель под конец семестра из-за пары человек решил добавить С++, в будущем он нам не пригодится особо)
А в задаче нужно просто вычислить неизвестную сторону и добавить сообщение об ошибке в случае ввода некорректных значений.
0
60 / 45 / 15
Регистрация: 06.03.2018
Сообщений: 202
14.01.2019, 18:54
Лучший ответ Сообщение было отмечено ZekeF как решение

Решение

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
// MFCApplication2Dlg.h : файл заголовка
//
 
#pragma once
#include "afxwin.h"
 
 
// диалоговое окно CMFCApplication2Dlg
class CMFCApplication2Dlg : public CDialogEx
{
// Создание
public:
    CMFCApplication2Dlg(CWnd* pParent = NULL);  // стандартный конструктор
 
// Данные диалогового окна
    enum { IDD = IDD_MFCAPPLICATION2_DIALOG };
 
    protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // поддержка DDX/DDV
 
 
// Реализация
protected:
    HICON m_hIcon;
 
    // Созданные функции схемы сообщений
    virtual BOOL OnInitDialog();
    afx_msg void OnPaint();
    afx_msg HCURSOR OnQueryDragIcon();
    DECLARE_MESSAGE_MAP()
public:
    // Катет A
    double m_dA;
    // Катет B
    double m_dB;
    // Гипотенуза
    double m_dC;
    // Кнопка рассчитать
    CButton m_btnRun;
    virtual void OnOK();
    afx_msg void OnBnClickedBtnRun();
};
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
// MFCApplication2Dlg.cpp : файл реализации
//
 
#include "stdafx.h"
#include "MFCApplication2.h"
#include "MFCApplication2Dlg.h"
#include "afxdialogex.h"
#include <math.h>
 
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
 
 
// диалоговое окно CMFCApplication2Dlg
 
 
 
CMFCApplication2Dlg::CMFCApplication2Dlg(CWnd* pParent /*=NULL*/)
    : CDialogEx(CMFCApplication2Dlg::IDD, pParent)
    , m_dA(0)
    , m_dB(0)
    , m_dC(0)
{
    m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
 
void CMFCApplication2Dlg::DoDataExchange(CDataExchange* pDX)
{
    CDialogEx::DoDataExchange(pDX);
    DDX_Text(pDX, IDC_ED_A, m_dA);
    DDX_Text(pDX, IDC_ED_B, m_dB);
    DDX_Text(pDX, IDC_ED_C, m_dC);
    DDX_Control(pDX, IDC_BTN_RUN, m_btnRun);
}
 
BEGIN_MESSAGE_MAP(CMFCApplication2Dlg, CDialogEx)
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    ON_BN_CLICKED(IDC_BTN_RUN, &CMFCApplication2Dlg::OnBnClickedBtnRun)
END_MESSAGE_MAP()
 
 
// обработчики сообщений CMFCApplication2Dlg
 
BOOL CMFCApplication2Dlg::OnInitDialog()
{
    CDialogEx::OnInitDialog();
 
    // Задает значок для этого диалогового окна.  Среда делает это автоматически,
    //  если главное окно приложения не является диалоговым
    SetIcon(m_hIcon, TRUE);         // Крупный значок
    SetIcon(m_hIcon, FALSE);        // Мелкий значок
 
    // TODO: добавьте дополнительную инициализацию
 
    return TRUE;  // возврат значения TRUE, если фокус не передан элементу управления
}
 
// При добавлении кнопки свертывания в диалоговое окно нужно воспользоваться приведенным ниже кодом,
//  чтобы нарисовать значок.  Для приложений MFC, использующих модель документов или представлений,
//  это автоматически выполняется рабочей областью.
 
void CMFCApplication2Dlg::OnPaint()
{
    if (IsIconic())
    {
        CPaintDC dc(this); // контекст устройства для рисования
 
        SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
 
        // Выравнивание значка по центру клиентского прямоугольника
        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;
 
        // Нарисуйте значок
        dc.DrawIcon(x, y, m_hIcon);
    }
    else
    {
        CDialogEx::OnPaint();
    }
}
 
// Система вызывает эту функцию для получения отображения курсора при перемещении
//  свернутого окна.
HCURSOR CMFCApplication2Dlg::OnQueryDragIcon()
{
    return static_cast<HCURSOR>(m_hIcon);
}
 
 
 
void CMFCApplication2Dlg::OnOK()
{
    // TODO: добавьте специализированный код или вызов базового класса
 
    //CDialogEx::OnOK();
}
 
 
void CMFCApplication2Dlg::OnBnClickedBtnRun()
{
    UpdateData();
    //Проверяем корректность введенных данных
    int iValid = 0;
    if (m_dA < 0)
    {
        AfxMessageBox(L"Не корректные данные катета A");
        GotoDlgCtrl(GetDlgItem(IDC_ED_A));
        return;
    }
    if (m_dB < 0)
    {
        AfxMessageBox(L"Не корректные данные катета B");
        GotoDlgCtrl(GetDlgItem(IDC_ED_B));
        return;
    }
    if (m_dC < 0)
    {
        AfxMessageBox(L"Не корректные данные гипотенузы C");
        GotoDlgCtrl(GetDlgItem(IDC_ED_C));
        return;
    }
    if (m_dA) iValid++;
    if (m_dB) iValid++;
    if (m_dC) iValid++;
    if (iValid < 2)
    {
        AfxMessageBox(L"Не достаточно данных для вычислений");
        return;
    }
    if (m_dA==0.0)
    {
        if (m_dC - m_dB > 0)
            m_dA = round(sqrt(m_dC*m_dC - m_dB*m_dB) * 1000) / 1000;
        else
        {
            AfxMessageBox(L"Длинна катета В больше гипотенузы С");
            GotoDlgCtrl(GetDlgItem(IDC_ED_B));
            return;
        }
    }
    else if (m_dB==0.0)
    {
        if (m_dC-m_dA>0)
            m_dB = round(sqrt(m_dC*m_dC - m_dA*m_dA)*1000)/1000;
        else
        {
            AfxMessageBox(L"Длинна катета A больше гипотенузы С");
            GotoDlgCtrl(GetDlgItem(IDC_ED_A));
            return;
        }
    }
    else
    {
        m_dC = round(sqrt(m_dA*m_dA + m_dB*m_dB)*1000)/1000;
    }
    
    UpdateData(FALSE);
}
Вложения
Тип файла: 7z MFCApplication2.7z (68.0 Кб, 8 просмотров)
1
60 / 45 / 15
Регистрация: 06.03.2018
Сообщений: 202
14.01.2019, 19:08
Лучший ответ Сообщение было отмечено ZekeF как решение

Решение

вот так

Добавлено через 1 минуту
сори за грамматику
1
0 / 0 / 0
Регистрация: 01.12.2018
Сообщений: 17
14.01.2019, 19:30  [ТС]
Спасибо вам огромное)
Я примитивный вариант сделал, но увы, он не хочет прикрепляться, весит много
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.01.2019, 19:30
Помогаю со студенческими работами здесь

MFC приложение на диалогах.
Как сделать так, что бы после нажатия клавиши enter или escape окно не закрывалось?

Крашится приложение в MFC
Всем привет, изучаю MFC и пытаюсь написать некий Paint=) но почему то при компиляции программа крашится, хотя ошибок нет, помогите...

Создавая MFC-приложение
С помощью процедуры преобразовать первую букву каждого слова в предложении в заглавную

Не работает MFC приложение
При запуске должно выводится окно с тулбаром. У меня Visual Studio 2015. #include &lt;afxext.h&gt; #include &lt;windows.h&gt; #include...

MFC приложение не компилируется
Доброго дня всем! Помогите пожалуйста не могу разобраться проект сделано в VC++ (6) если преобразовать в VC++ (10) то программа без...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
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 . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru