基于对话框的Windows程序设计 二、实验目的和要求 实验目的∶ 掌握API、MFC等概念,熟悉如何使用WIN32 API和MFC实际编程应用。 要求完成∶ 1、 用对话框界面求一元二次方程的实根; 2、 对话框的界面自行设计,有计算和结束键,有输入(a,b,c)和输出(几种不同的根),编程实现,说明上机实验的操作过程。
时间: 2023-06-20 15:08:54 浏览: 130
实习指导书(2)-基于MFC的对话框的程序设计
实验步骤:
1. 打开Visual Studio,创建新项目,选择MFC应用程序类型,勾选“对话框”选项,创建项目。
2. 在资源视图中,双击IDD_DIALOG1,打开对话框编辑器,在对话框中添加三个文本框和一个“计算”按钮和一个“结束”按钮。
3. 在对话框类(CMyDlg)的头文件中添加三个变量,分别表示方程中的a、b、c。
4. 在代码中添加两个函数,分别处理“计算”和“结束”按钮的点击事件。在“计算”按钮的点击事件中,获取文本框中的a、b、c的值,计算一元二次方程的根,并将结果显示在对话框中。在“结束”按钮的点击事件中,关闭对话框。
5. 编译代码,运行程序,测试功能。
代码如下:
```
// MyDlg.h : header file
//
#pragma once
// CMyDlg dialog
class CMyDlg : public CDialogEx
{
// Construction
public:
CMyDlg(CWnd* pParent = nullptr); // standard constructor
// Dialog Data
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_DIALOG1 };
#endif
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
// Implementation
protected:
double m_a;
double m_b;
double m_c;
afx_msg void OnCalculate();
afx_msg void OnExit();
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnBnClickedButtonCalculate();
afx_msg void OnBnClickedButtonExit();
};
```
```
// MyDlg.cpp : implementation file
//
#include "pch.h"
#include "WindowsDialog.h"
#include "MyDlg.h"
#include "afxdialogex.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CMyDlg dialog
CMyDlg::CMyDlg(CWnd* pParent /*=nullptr*/)
: CDialogEx(IDD_DIALOG1, pParent)
, m_a(0)
, m_b(0)
, m_c(0)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CMyDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CMyDlg, CDialogEx)
ON_BN_CLICKED(IDC_BUTTON_CALCULATE, &CMyDlg::OnBnClickedButtonCalculate)
ON_BN_CLICKED(IDC_BUTTON_EXIT, &CMyDlg::OnBnClickedButtonExit)
END_MESSAGE_MAP()
// CMyDlg message handlers
afx_msg void CMyDlg::OnCalculate()
{
CString strA, strB, strC;
GetDlgItemText(IDC_EDIT_A, strA);
GetDlgItemText(IDC_EDIT_B, strB);
GetDlgItemText(IDC_EDIT_C, strC);
m_a = _tstof(strA);
m_b = _tstof(strB);
m_c = _tstof(strC);
double delta = m_b * m_b - 4 * m_a * m_c;
if (delta < 0)
{
SetDlgItemText(IDC_STATIC_RESULT, _T("无实根"));
}
else if (delta == 0)
{
double x = -m_b / (2 * m_a);
CString strX;
strX.Format(_T("x=%f"), x);
SetDlgItemText(IDC_STATIC_RESULT, strX);
}
else
{
double x1 = (-m_b + sqrt(delta)) / (2 * m_a);
double x2 = (-m_b - sqrt(delta)) / (2 * m_a);
CString strX1, strX2;
strX1.Format(_T("x1=%f"), x1);
strX2.Format(_T("x2=%f"), x2);
SetDlgItemText(IDC_STATIC_RESULT, strX1 + _T(", ") + strX2);
}
}
afx_msg void CMyDlg::OnExit()
{
CDialogEx::OnOK();
}
void CMyDlg::OnBnClickedButtonCalculate()
{
OnCalculate();
}
void CMyDlg::OnBnClickedButtonExit()
{
OnExit();
}
```
阅读全文