学生基本信息界面(MFC)

news2024/11/26 19:39:01

本文将引用MFC常用控件,写一个学生基本信息界面,最后将统计结果显示在提示框中,运行效果如下:

1.新建基于对话框的MFC项目,布局对话框,修改相应控件ID并绑定变量

注意:第一个单选控件的group属性

3.在构造函数中为m_bMale赋值

C学生基本信息Dlg::C学生基本信息Dlg(CWnd* pParent /*=NULL*/)
	: CDialogEx(C学生基本信息Dlg::IDD, pParent)
	, m_strName(_T(""))
	, m_strNo(_T(""))
	, m_tBirth(0)
	, m_strSpecial(_T(""))
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
	m_bMale = FALSE;
}

4.为两个单选框控件,添加响应函数

void C学生基本信息Dlg::OnBnClickedRadioMale()
{
	// TODO:  在此添加控件通知处理程序代码
	m_bMale = TRUE;
}

void C学生基本信息Dlg::OnBnClickedRadioFemale()
{
	// TODO:  在此添加控件通知处理程序代码
	m_bMale = FALSE;
}

5.初始化对话框界面OnInitDialog()


BOOL C学生基本信息Dlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	// 将“关于...”菜单项添加到系统菜单中。

	// IDM_ABOUTBOX 必须在系统命令范围内。
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		BOOL bNameValid;
		CString strAboutMenu;
		bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
		ASSERT(bNameValid);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动
	//  执行此操作
	SetIcon(m_hIcon, TRUE);			// 设置大图标
	SetIcon(m_hIcon, FALSE);		// 设置小图标

	// TODO:  在此添加额外的初始化代码

	// 设置单选按钮初始选中状态
	if (!m_bMale)
		CheckRadioButton(IDC_RADIO_MALE, IDC_RADIO_FEMALE, IDC_RADIO_FEMALE);//单选按钮选择 女性
	else
		CheckRadioButton(IDC_RADIO_MALE, IDC_RADIO_FEMALE, IDC_RADIO_MALE);//单选按钮选择 男性
	// 这里对专业组合框进行初始化
	m_comboSpecial.AddString(_T("机械工程及其自动化"));
	m_comboSpecial.AddString(_T("电气工程及其自动化"));
	m_comboSpecial.AddString(_T("计算机科学"));
	m_strSpecial = "计算机科学";
	m_tBirth = CTime(1986, 1, 1, 0, 0, 0); 	// 对出生年月初始化
	UpdateData(FALSE);


	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

6.单独添加函数TextMessage()用于处理界面信息

//注意在.h中声明,在.cpp中实现
void C学生基本信息Dlg::TextMessage()
{
	CString strRes, strSex("女");
	if (m_bMale)
	{
		strSex = "男";
	}

	strRes.Format(_T("姓名:%s, 学号:%s, 性别:%s, 出生年月:%s, 专业:%s"),
		m_strName, m_strNo, strSex,
		m_tBirth.Format("%Y-%m-%d"), m_strSpecial);

	MessageBox(strRes);
}

7.完善确认按钮的响应函数

void C学生基本信息Dlg::OnBnClickedOk()
{
	// TODO:  在此添加控件通知处理程序代码
	UpdateData();
	m_strName.TrimLeft();
	m_strNo.TrimLeft();
	if (m_strName.IsEmpty())
		MessageBox(_T("必须要有姓名!"));
	else if (m_strNo.IsEmpty())
		MessageBox(_T("必须要有学号!"));
	else
		TextMessage();

		CDialog::OnOK();

	/*CDialogEx::OnOK();*/
}

8.全文代码


// 学生基本信息Dlg.h : 头文件
//

#pragma once
#include "atltime.h"
#include "afxwin.h"


// C学生基本信息Dlg 对话框
class C学生基本信息Dlg : public CDialogEx
{
// 构造
public:
	C学生基本信息Dlg(CWnd* pParent = NULL);	// 标准构造函数

// 对话框数据
	enum { IDD = IDD_MY_DIALOG };

	protected:
	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV 支持


// 实现
protected:
	HICON m_hIcon;

	// 生成的消息映射函数
	virtual BOOL OnInitDialog();
	afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
	afx_msg void OnPaint();
	afx_msg HCURSOR OnQueryDragIcon();
	DECLARE_MESSAGE_MAP()
public:
	CString m_strName; //姓名
	CString m_strNo;  //学号
	CTime m_tBirth;  //时间日期
	CComboBox m_comboSpecial;
	CString m_strSpecial;  //专业
	BOOL m_bMale;  //性别
	afx_msg void OnBnClickedRadioMale();
	afx_msg void OnBnClickedRadioFemale();
	afx_msg void OnBnClickedOk();
	void TextMessage();
};

// 学生基本信息Dlg.cpp : 实现文件
//

#include "stdafx.h"
#include "学生基本信息.h"
#include "学生基本信息Dlg.h"
#include "afxdialogex.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// 用于应用程序“关于”菜单项的 CAboutDlg 对话框

class CAboutDlg : public CDialogEx
{
public:
	CAboutDlg();

// 对话框数据
	enum { IDD = IDD_ABOUTBOX };

	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持

// 实现
protected:
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD)
{
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
END_MESSAGE_MAP()


// C学生基本信息Dlg 对话框



C学生基本信息Dlg::C学生基本信息Dlg(CWnd* pParent /*=NULL*/)
	: CDialogEx(C学生基本信息Dlg::IDD, pParent)
	, m_strName(_T(""))
	, m_strNo(_T(""))
	, m_tBirth(0)
	, m_strSpecial(_T(""))
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
	m_bMale = FALSE;

}

void C学生基本信息Dlg::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
	DDX_Text(pDX, IDC_EDIT_NAME, m_strName);
	DDX_Text(pDX, IDC_EDIT_NO, m_strNo);
	DDX_DateTimeCtrl(pDX, IDC_DATETIMEPICKER1, m_tBirth);
	DDX_Control(pDX, IDC_COMBO_SPECIAL, m_comboSpecial);
	DDX_CBString(pDX, IDC_COMBO_SPECIAL, m_strSpecial);
}

BEGIN_MESSAGE_MAP(C学生基本信息Dlg, CDialogEx)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_RADIO_MALE, &C学生基本信息Dlg::OnBnClickedRadioMale)
	ON_BN_CLICKED(IDC_RADIO_FEMALE, &C学生基本信息Dlg::OnBnClickedRadioFemale)
	ON_BN_CLICKED(IDOK, &C学生基本信息Dlg::OnBnClickedOk)
END_MESSAGE_MAP()


// C学生基本信息Dlg 消息处理程序

BOOL C学生基本信息Dlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	// 将“关于...”菜单项添加到系统菜单中。

	// IDM_ABOUTBOX 必须在系统命令范围内。
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		BOOL bNameValid;
		CString strAboutMenu;
		bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
		ASSERT(bNameValid);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动
	//  执行此操作
	SetIcon(m_hIcon, TRUE);			// 设置大图标
	SetIcon(m_hIcon, FALSE);		// 设置小图标

	// TODO:  在此添加额外的初始化代码

	// 设置单选按钮初始选中状态
	if (!m_bMale)
		CheckRadioButton(IDC_RADIO_MALE, IDC_RADIO_FEMALE, IDC_RADIO_FEMALE);//单选按钮选择 女性
	else
		CheckRadioButton(IDC_RADIO_MALE, IDC_RADIO_FEMALE, IDC_RADIO_MALE);//单选按钮选择 男性
	// 这里对专业组合框进行初始化
	m_comboSpecial.AddString(_T("机械工程及其自动化"));
	m_comboSpecial.AddString(_T("电气工程及其自动化"));
	m_comboSpecial.AddString(_T("计算机科学"));
	m_strSpecial = "计算机科学";
	m_tBirth = CTime(1986, 1, 1, 0, 0, 0); 	// 对出生年月初始化
	UpdateData(FALSE);


	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

void C学生基本信息Dlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialogEx::OnSysCommand(nID, lParam);
	}
}

// 如果向对话框添加最小化按钮,则需要下面的代码
//  来绘制该图标。  对于使用文档/视图模型的 MFC 应用程序,
//  这将由框架自动完成。

void C学生基本信息Dlg::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 C学生基本信息Dlg::OnQueryDragIcon()
{
	return static_cast<HCURSOR>(m_hIcon);
}



void C学生基本信息Dlg::OnBnClickedRadioMale()
{
	// TODO:  在此添加控件通知处理程序代码
	m_bMale = TRUE;
}


void C学生基本信息Dlg::OnBnClickedRadioFemale()
{
	// TODO:  在此添加控件通知处理程序代码
	m_bMale = FALSE;
}

void C学生基本信息Dlg::TextMessage()
{
	CString strRes, strSex("女");
	if (m_bMale)
	{
		strSex = "男";
	}

	strRes.Format(_T("姓名:%s, 学号:%s, 性别:%s, 出生年月:%s, 专业:%s"),
		m_strName, m_strNo, strSex,
		m_tBirth.Format("%Y-%m-%d"), m_strSpecial);

	MessageBox(strRes);
}

void C学生基本信息Dlg::OnBnClickedOk()
{
	// TODO:  在此添加控件通知处理程序代码
	UpdateData();
	m_strName.TrimLeft();
	m_strNo.TrimLeft();
	if (m_strName.IsEmpty())
		MessageBox(_T("必须要有姓名!"));
	else if (m_strNo.IsEmpty())
		MessageBox(_T("必须要有学号!"));
	else
		TextMessage();

		CDialog::OnOK();

	/*CDialogEx::OnOK();*/
}

9.运行结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1929870.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《算法笔记》总结No.7——二分(多例题详解版)

一.二分查找 目前有一个有序数列&#xff0c;举个例子&#xff0c;假设是1~1000&#xff0c;让我们去查找931这个数字&#xff0c;浅显且暴力的做法就是直接从头到尾遍历一遍&#xff0c;直到找到931为止。当n非常大&#xff0c;比如达到100w时&#xff0c;这是一个非常大的量级…

获取欧洲时报中国板块前新闻数据(多线程版)

这里写目录标题 一.数据获取流程二.获取主页面数据并提取出文章url三.获取文章详情页的数据并提取整体代码展示 一.数据获取流程 我们首先通过抓包就能够找到我们所需数据的api 这里一共有五个参数其中只有第一个和第五个参数是变化的第一个参数就是第几页第五个是一个由时…

论文翻译 | Successive Prompting for Decomposing Complex Questions 分解复杂问题的连续提示

摘要 回答需要做出潜在决策的复杂问题是一项具有挑战性的任务&#xff0c;尤其是在监督有限的情况下。 最近的研究利用大型语言模型&#xff08;LMs&#xff09;的能力&#xff0c;在少量样本设置中通过展示如何在单次处理复杂问题的同时输出中间推理过程&#xff0c;来执行复杂…

【自学安全防御】二、防火墙NAT智能选路综合实验

任务要求&#xff1a; &#xff08;衔接上一个实验所以从第七点开始&#xff0c;但与上一个实验关系不大&#xff09; 7&#xff0c;办公区设备可以通过电信链路和移动链路上网(多对多的NAT&#xff0c;并且需要保留一个公网IP不能用来转换) 8&#xff0c;分公司设备可以通过总…

Jdk8 Idea Maven Received fatal alert: protocol_version

问题描述 使用idea开发工具&#xff0c;maven加载项目依赖时&#xff0c;出现错误&#xff1a; Could not transfer artfact xxxxxxx from/to maven-dep-repos https://XXXXXXX: Received fatal alert: protocol_version初步思路 用关键字protocol_version 去检索&#xff0…

Schematics,一个牛逼的python库用于数据验证和转换的库

目录 什么是Schematics&#xff1f; 为什么使用Schematics&#xff1f; 安装Schematics 定义模式 验证数据 自定义验证 转换数据 结语 什么是Schematics&#xff1f; 在Python的世界中&#xff0c;Schematics是一个用于数据验证和转换的库。它通过定义数据结构的模式(…

30秒学会UML-功能类图

目录 1、类图本体 三部分 修饰符 2、类与类直接关系 泛化关系 实现关系 简单关联关系 依赖关系 组合关系 聚合关系 1、类图本体 三部分 第一层&#xff1a;类名第二层&#xff1a;成员变量&#xff08;类的属性&#xff09;第三层&#xff1a;函数方法&#xff08;类…

PX4 运行 make px4_sitl_default gazebo 报错

报错原因&#xff1a;最开始我把依赖一直都是在base环境下安装的&#xff0c;没有conda deactivate&#xff0c;而pip install的东西应该装在系统环境&#xff0c;不能装在base环境下&#xff0c;sudo apt 是装在系统环境的 1.检查ros 用鱼香ros安装 wget http://fishros.…

SSL证书续费

讲解下域名证书如何续费&#xff08;以阿里云为例&#xff09; ‍ 提醒 一般云服务器厂商&#xff0c;都会提前和你一个月左右通知&#xff08;邮件、短信等&#xff09;&#xff0c;例如&#xff1a; 尊敬的 xxx&#xff1a;您域名 www.peterjxl.com 使用的 SSL 证书 xxxxx…

Linux编程(通信协议---udp)

UDP&#xff08;用户数据报协议&#xff09;是一种无连接的网络协议&#xff0c;主要用于快速传输数据。以下是UDP协议的一些主要特点&#xff1a; 1. **无连接**&#xff1a;UDP是无连接的协议&#xff0c;这意味着在数据传输之前不需要建立连接。每个UDP数据包都是独立的&am…

数据库操作太复杂?Python Shelve模块让你轻松存储,一键搞定!

目录 1、基本操作入门 &#x1f4da; 1.1 安装Shelve模块 1.2 创建与打开Shelve文件 2、存储与读取数据 &#x1f510; 2.1 写入键值对 2.2 读取存储的数据 3、高级功能探索 &#x1f9ed; 3.1 使用Shelve迭代键和值 3.2 键的管理&#xff1a;添加、删除与更新 4、异…

minishell

今天完成了minishell的制作 项目需求&#xff1a; 1. 获取终端用户输入的命令&#xff0c;并输出相应的执行结果。 touch cp mv ls ls -a ls -l mkdir rmdir pwd cd ln ln -s exit ---------…

鸿蒙开发HarmonyOS NEXT (四) 熟悉ArkTs (下)

一、动画 1、属性动画 animation,可以通过配置动画时间duration等参数&#xff0c;实现移动时的平滑过度 写了个小鱼游动的小案例 Entry Component struct ActionPage {State fish: Resource $r(app.media.fish_right) //小鱼图片State fishX: number 200 //初始化小鱼横坐…

Day07-员工管理-上传下载

1.员工管理-导出excel 导出员工接口返回的是二进制axios配置responseType为blob接收二进制流文件为Blob格式按装file-saver包&#xff0c;实现下载Blob文件npm install add file-saver导出员工excel的接口 (src/api/employee.js) export function exportEmployee(){return req…

【区块链 + 智慧政务】涉税行政事业性收费“e 链通”项目 | FISCO BCOS应用案例

国内很多城市目前划转至税务部门征收的非税收入项目已达 17 项&#xff0c;其征管方式为行政主管部门核定后交由税务 部门征收。涉税行政事业性收费受限于传统的管理模式&#xff0c;缴费人、业务主管部门、税务部门、财政部门四方处于 相对孤立的状态&#xff0c;信息的传递靠…

【Diffusion学习】【生成式AI】Diffusion Model 原理剖析 (2/4) (optional)【公式推导】

文章目录 影像生成模型本质上的共同目标【拟合分布】Maximum Likelihood Estimation VAE 影像生成模型本质上的共同目标【拟合分布】 Maximum Likelihood Estimation VAE

图片服务器是什么?常见的图片服务器是哪几种?图片服务器的要求是什么?

什么是图片服务器 图片服务器&#xff0c;顾名思义就是专门用于处理图片的服务器&#xff0c;向外提供图片的上传&#xff0c;下载&#xff0c;图片展示等服务 为什么我们要使用专门的服务器处理图片 图片的数据量比文字展示高得多&#xff0c;图片的上传下载展示一系列操作…

Linux进程——进程优先级与僵尸进程孤儿进程

文章目录 僵尸进程变成僵尸状态的过程 孤儿进程进程优先级如何修改进程优先级为什么优先级有范围 僵尸进程 僵尸状态进程本质上就是死亡状态 在进程死亡之后&#xff0c;不会直接对进程进行释放&#xff0c;而是先会处理一些后事 进程在结束退出的时候&#xff0c;也会有一些…

介绍 Elasticsearch 中的 Learning to Tank - 学习排名

作者&#xff1a;来自 Elastic Aurlien Foucret 从 Elasticsearch 8.13 开始&#xff0c;我们提供了原生集成到 Elasticsearch 中的学习排名 (learning to rank - LTR) 实现。LTR 使用经过训练的机器学习 (ML) 模型为你的搜索引擎构建排名功能。通常&#xff0c;该模型用作第二…

CSA笔记1-基础知识和目录管理命令

[litonglocalhost ~]$ 是终端提示符&#xff0c;类似于Windows下的cmd的命令行 litong 当前系统登录的用户名 分隔符 localhost 当前机器名称&#xff0c;本地主机 ~ 当前用户的家目录 $ 表示当前用户为普通用户若为#则表示当前用户为超级管理员 su root 切换root权限…