当前位置: 首页 > news >正文

C++ MFC控件实现小型通讯录

MFC这个我看了下用的人确实很少了,建议大家要学(恐怕没有),或是要做作业前可以大概开个新项目b站学一下入个门,MFC项目建好了里面会乱七八糟创建一堆默认文件,看着确实很晕,大部分是不用管的。

我下文只会做出通讯录介绍,并贴出核心代码,具体一整套文件我会在文章末尾附上github链接.

MFC是一个基于C++的类库,它封装了Windows API的大部分功能,提供了一个应用程序框架,用于简化Windows应用程序的开发。因此,仅仅提取核心代码是不够的,因为MFC的应用程序依赖于其框架和类库的完整结构。

一、实验要求

实验  小型通讯录管理程序设计
一、实验目的
1.    深入理解面向对象技术的封装性、继承性和多态性,掌握面向对象程序设计方法。
2.    综合应用C++基础知识实现小型应用程序开发。
3.    掌握使用C++流类库实现数据文件访问的操作方法。
4.    熟悉基于对话框的MFC应用程序创建过程,掌握ClassWizard工具和常用控件的使用方法。
二、仪器及设备
1.PC机1台(1G以上内存)
2.VC++集成开发环境
三、实验内容与要求
设计一个小型个人通讯录管理程序,实现通讯录的新建、保存、以及通讯录的增、删、改、查功能。(提示:可使用STL对通讯录进行各种操作,并使用文件存储通讯录。)
要求系统用户界面良好,功能完善,性能稳定。
 

二、MFC介绍

1. MFC 的定义

  • Microsoft Foundation Classes (MFC) 是微软提供的一个 C++ 类库,它封装了 Windows API 的大部分功能,提供了一个应用程序框架,用于简化 Windows 应用程序的开发。

  • MFC 提供了一系列的类和函数,用于处理窗口、消息、控件、对话框、菜单等常见的 GUI 元素。

2. MFC 的优势

  • 封装 Windows API:MFC 将复杂的 Windows API 封装成易于使用的 C++ 类,减少了直接调用 API 的复杂性。

  • 应用程序框架:MFC 提供了一个完整的应用程序框架,包括文档/视图架构,简化了应用程序的结构。

  • 快速开发:通过 MFC,开发人员可以快速创建功能丰富的 Windows 应用程序,减少开发时间和工作量。

3. MFC 的主要组件

  • CWinApp 类:表示一个 Windows 应用程序,是应用程序的主类。

  • CWnd 类:表示一个窗口,是所有窗口类的基类。

  • CDialog 类:用于创建对话框。

  • CView 类:表示一个视图,用于显示文档数据。

  • CDocument 类:表示一个文档,用于存储应用程序的数据。

4. MFC 的开发环境

  • Visual Studio:MFC 通常与 Visual Studio 集成开发环境(IDE)一起使用。Visual Studio 提供了丰富的工具和模板,支持 MFC 应用程序的开发。

  • 资源编辑器:Visual Studio 的资源编辑器可以方便地创建和编辑对话框、菜单、工具栏等资源。

5. MFC 的开发流程

  1. 创建项目:在 Visual Studio 中创建一个新的 MFC 应用程序项目。

  2. 设计界面:使用资源编辑器设计应用程序的界面,包括窗口、对话框、菜单等。

  3. 编写代码:在 MFC 提供的类和函数基础上,编写应用程序的逻辑代码。

  4. 调试和测试:使用 Visual Studio 的调试工具进行调试和测试,确保应用程序的正确性。

三、基本功能描述

基于链表存储数据。

做的比较简陋,就一个页面。

实现对班级、姓名、学号、性别、手机号。

1.添加:

在右边录入框输入全部信息后即可添加至根目录下message.cav中。

2.删除

录入框输入学号,点击删除即可。

3.修改:

这个我当时做的时候好像偷懒了,现在是只能在右边录入框输入要修改的信息,会依据学号修改。但是学号是固定的,不能修改,要改学号只能删除。

4.查找

依据学号查询。

5.一键清空录入框。

6.其他

下面三个如图所示了
操作完可以点击刷新,会更新显示。

7.退出时会自动保存

四、代码

进行一个一键的下载:
下载完在Asystem里点开sln文件就可以启动了

https://github.com/LB21goto/-C-MFC-

1.添加
 

void CAsystemDlg::OnBnClickedAddB() // 添加功能***
{									// TODO: 在此添加控件通知处理程序代码// indexindex = msg;while (index->next != NULL){index = index->next;}UpdateData(TRUE); // 传入数据Msg *search = msg->next;if (m_Name != "" && m_ID != ""){ // 输入学号与姓名if (search != NULL){while (search != NULL && m_ID != search->ID && search->next != NULL){search = search->next;}if (m_ID == search->ID)return; // 出现重复学号不予处理}Msg *node = new Msg; // 利用链表存储信息node->next = NULL;index->next = node;index = index->next;index->Class = m_Class;index->Name = m_Name;index->ID = m_ID;index->Sex = m_Sex;index->Phone = m_Phone;CString All = m_Class + _T(",") + m_Name + _T(",") + m_ID + _T(",") + m_Sex + _T(",") + m_Phone + _T(",");// 在 CListCtrl 中添加新行int nItem = m_List.InsertItem(m_List.GetItemCount(), m_Class);// 设置其他列的值m_List.SetItemText(nItem, 1, m_Name);m_List.SetItemText(nItem, 2, m_ID);m_List.SetItemText(nItem, 3, m_Sex);m_List.SetItemText(nItem, 4, m_Phone);UpdateData(FALSE); // 显示数据MessageBox(_T("添加成功"));}
}

2.修改
 

void CAsystemDlg::OnBnClickedSearchB() // 查找功能***
{UpdateData(TRUE); // 将控件中的数据更新到成员变量Msg *search = msg->next; // 从链表的第一个节点开始搜索bool found = false;// 清空 CListCtrl,准备显示搜索结果m_List.DeleteAllItems();int nRow = 0;// 遍历链表搜索匹配项while (search != NULL){bool match = false;// 按学号搜索if (m_ID != L"" && m_ID == search->ID){match = true;}// 按姓名搜索else if (m_Name != L"" && m_Name == search->Name){match = true;}// 按电话搜索else if (m_Phone != L"" && m_Phone == search->Phone){match = true;}if (match){// 在 CListCtrl 中插入匹配的行int nItem = m_List.InsertItem(nRow, search->Class);m_List.SetItemText(nItem, 1, search->Name);m_List.SetItemText(nItem, 2, search->ID);m_List.SetItemText(nItem, 3, search->Sex);m_List.SetItemText(nItem, 4, search->Phone);nRow++;found = true;}search = search->next;}if (found){MessageBox(_T("查找成功"));}else{MessageBox(_T("未找到匹配项"));// 恢复显示所有数据search = msg->next;nRow = 0;while (search != NULL){int nItem = m_List.InsertItem(nRow, search->Class);m_List.SetItemText(nItem, 1, search->Name);m_List.SetItemText(nItem, 2, search->ID);m_List.SetItemText(nItem, 3, search->Sex);m_List.SetItemText(nItem, 4, search->Phone);nRow++;search = search->next;}}UpdateData(FALSE);
}

3.刷新

void CAsystemDlg::OnBnClickedButton1() // reset功能
{// TODO: 在此添加控件通知处理程序代码UpdateData(TRUE);// 清空表格所有内容m_List.DeleteAllItems();// 从链表中重新读取数据Msg *current = msg->next;int nRow = 0;// 重新填充表格while (current != NULL){// 插入新行并设置第一列int nItem = m_List.InsertItem(nRow, current->Class);// 设置其他列的值m_List.SetItemText(nItem, 1, current->Name);m_List.SetItemText(nItem, 2, current->ID);m_List.SetItemText(nItem, 3, current->Sex);m_List.SetItemText(nItem, 4, current->Phone);current = current->next;nRow++;}UpdateData(FALSE);
}

核心代码

// AsystemDlg.cpp: 实现文件
#include "pch.h"
#include "framework.h"
#include "Asystem.h"
#include "AsystemDlg.h"
#include "afxdialogex.h"#ifdef _DEBUG
#define new DEBUG_NEW
#endif
using namespace std;
// 用于应用程序"关于"菜单项的 CAboutDlg 对话框class CAboutDlg : public CDialogEx
{
public:CAboutDlg();// 对话框数据
#ifdef AFX_DESIGN_TIMEenum{IDD = IDD_ABOUTBOX};
#endifprotected:virtual void DoDataExchange(CDataExchange *pDX); // DDX/DDV 支持// 实现
protected:DECLARE_MESSAGE_MAP()
};CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX)
{
}void CAboutDlg::DoDataExchange(CDataExchange *pDX)
{CDialogEx::DoDataExchange(pDX);
}BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
END_MESSAGE_MAP()// CAsystemDlg 对话框CAsystemDlg::CAsystemDlg(CWnd *pParent /*=nullptr*/): CDialogEx(IDD_ASYSTEM_DIALOG, pParent), m_Name(_T("")), m_ID(_T("")), m_Sex(_T("")), m_Phone(_T(""))
{m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}void CAsystemDlg::DoDataExchange(CDataExchange *pDX) // 框内数据交换
{CDialogEx::DoDataExchange(pDX);DDX_Text(pDX, IDC_Eclass, m_Class);DDX_Text(pDX, IDC_Ename, m_Name);DDX_Text(pDX, IDC_EID, m_ID);DDX_Text(pDX, IDC_Esex, m_Sex);DDX_Text(pDX, IDC_Ephone, m_Phone);DDX_Control(pDX, IDC_LIST2, m_List);
}BEGIN_MESSAGE_MAP(CAsystemDlg, CDialogEx) // 按钮点击映射
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_Add_B, &CAsystemDlg::OnBnClickedAddB)
ON_BN_CLICKED(IDC_Search_B, &CAsystemDlg::OnBnClickedSearchB)
ON_BN_CLICKED(IDC_Modify_B, &CAsystemDlg::OnBnClickedModifyB)
ON_BN_CLICKED(IDC_Delete_B, &CAsystemDlg::OnBnClickedDeleteB)
ON_BN_CLICKED(IDC_Bclearall, &CAsystemDlg::OnBnClickedBclearall)
ON_BN_CLICKED(IDC_Bclearin, &CAsystemDlg::OnBnClickedBclearin)
ON_BN_CLICKED(IDCANCEL, &CAsystemDlg::OnBnClickedCancel)
ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST2, &CAsystemDlg::OnLvnItemchangedList2)
ON_WM_MOUSEMOVE() // 添加鼠标移动消息处理
ON_EN_CHANGE(IDC_Enumber, &CAsystemDlg::OnEnChangeEnumber)
ON_BN_CLICKED(IDC_BUTTON1, &CAsystemDlg::OnBnClickedButton1)
END_MESSAGE_MAP()// CAsystemDlg 消息处理程序
Msg *msg = new Msg;	 // 此为头结点,不可能不创
Msg *tail = new Msg; // 此为尾结点,不可能不创void change(int *i)
{if (*i == 5)*i = 1;else if (*i < 5)*i = *i + 1;
} // 数字为结构体内数据类数CString All; // 用于保存个人信息的字符串
Msg *index;	 // 设置递增指针用于添加BOOL CAsystemDlg::OnInitDialog()
{CDialogEx::OnInitDialog();// 设置报表模式(必须)m_List.ModifyStyle(0, LVS_REPORT);msg = new Msg; // 创建头结点msg->next = NULL;tail = new Msg; // 创建尾结点tail->next = NULL;// 创建工具提示控件(鼠标悬停动作m_ToolTip.Create(this, TTS_ALWAYSTIP);m_ToolTip.SetDelayTime(TTDT_AUTOPOP, 5000); // 显示时间m_ToolTip.SetDelayTime(TTDT_INITIAL, 500);	// 初始延迟m_ToolTip.SetMaxTipWidth(300);				// 提示框最大宽度// 为每个控件添加提示文本m_ToolTip.AddTool(GetDlgItem(IDC_Add_B), _T("添加新的联系人"));m_ToolTip.AddTool(GetDlgItem(IDC_Search_B), _T("搜索已有联系人"));m_ToolTip.AddTool(GetDlgItem(IDC_Modify_B), _T("修改指定学号联系人"));m_ToolTip.AddTool(GetDlgItem(IDC_Delete_B), _T("删除指定学号联系人"));m_ToolTip.AddTool(GetDlgItem(IDC_Bclearall), _T("清空所有联系人"));m_ToolTip.AddTool(GetDlgItem(IDC_Bclearin), _T("清空输入框"));m_ToolTip.Activate(TRUE);// 将"关于..."菜单项添加到系统菜单中。// IDM_ABOUTBOX 必须在系统命令范围内。ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu *pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != nullptr){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: 在此添加额外的初始化代码// 字体大小// 创建新字体(此为主标题m_Font.CreateFont(50,			  // 字体高度20,			  // 字体宽度0,			  // 倾斜角度0,			  // 方向角度FW_NORMAL,	  // 字体粗细FALSE,		  // 是否斜体FALSE,		  // 是否下划线0,			  // 是否删除线ANSI_CHARSET, // 字符集OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH | FF_SWISS,_T("Arial"));// 获取 Static 控件并设置字体(list2默认大小合适,暂不使用GetDlgItem(IDC_STATIC1)->SetFont(&m_Font);// 初始化表格m_List.ModifyStyle(0, LVS_REPORT);								  // 设置为报表模式m_List.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT); // 网格线 + 整行选择// 添加列// 此为表格第一行自定义类名m_List.InsertColumn(0, _T("Class"), LVCFMT_LEFT, 80);m_List.InsertColumn(1, _T("Name"), LVCFMT_LEFT, 65);m_List.InsertColumn(2, _T("ID"), LVCFMT_LEFT, 140);m_List.InsertColumn(3, _T("Sex"), LVCFMT_LEFT, 65);m_List.InsertColumn(4, _T("Phone"), LVCFMT_LEFT, 140);m_List.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);// 从文件加载数据fstream File;File.open("message.csv", ios::in);if (!File.is_open()){// 如果文件不存在,创建新文件File.open("message.csv", ios::out);if (File.is_open()){File << "Class,Name,ID,Sex,Phone\n";File.close();}return TRUE;}string str;getline(File, str); // 跳过标题行Msg *tail = msg; // 用于追加节点while (getline(File, str)){stringstream ss(str);string item;Msg *newNode = new Msg;newNode->next = NULL;// 读取每个字段if (getline(ss, item, ','))newNode->Class = CString(item.c_str());if (getline(ss, item, ','))newNode->Name = CString(item.c_str());if (getline(ss, item, ','))newNode->ID = CString(item.c_str());if (getline(ss, item, ','))newNode->Sex = CString(item.c_str());if (getline(ss, item, ','))newNode->Phone = CString(item.c_str());// 添加到链表tail->next = newNode;tail = newNode;// 添加到表格显示int nItem = m_List.InsertItem(m_List.GetItemCount(), newNode->Class);m_List.SetItemText(nItem, 1, newNode->Name);m_List.SetItemText(nItem, 2, newNode->ID);m_List.SetItemText(nItem, 3, newNode->Sex);m_List.SetItemText(nItem, 4, newNode->Phone);}File.close();return TRUE;
}void CAsystemDlg::OnSysCommand(UINT nID, LPARAM lParam)
{if ((nID & 0xFFF0) == IDM_ABOUTBOX){CAboutDlg dlgAbout;dlgAbout.DoModal();}else{CDialogEx::OnSysCommand(nID, lParam);}
}// 如果向对话框添加最小化按钮,则需要下面的代码
//  来绘制该图标。  对于使用文档/视图模型的 MFC 应用程序,
//  这将由框架自动完成。void CAsystemDlg::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 CAsystemDlg::OnQueryDragIcon()
{return static_cast<HCURSOR>(m_hIcon);
}void CAsystemDlg::OnBnClickedAddB() // 添加功能***
{									// TODO: 在此添加控件通知处理程序代码// indexindex = msg;while (index->next != NULL){index = index->next;}UpdateData(TRUE); // 传入数据Msg *search = msg->next;if (m_Name != "" && m_ID != ""){ // 输入学号与姓名if (search != NULL){while (search != NULL && m_ID != search->ID && search->next != NULL){search = search->next;}if (m_ID == search->ID)return; // 出现重复学号不予处理}Msg *node = new Msg; // 利用链表存储信息node->next = NULL;index->next = node;index = index->next;index->Class = m_Class;index->Name = m_Name;index->ID = m_ID;index->Sex = m_Sex;index->Phone = m_Phone;CString All = m_Class + _T(",") + m_Name + _T(",") + m_ID + _T(",") + m_Sex + _T(",") + m_Phone + _T(",");// 在 CListCtrl 中添加新行int nItem = m_List.InsertItem(m_List.GetItemCount(), m_Class);// 设置其他列的值m_List.SetItemText(nItem, 1, m_Name);m_List.SetItemText(nItem, 2, m_ID);m_List.SetItemText(nItem, 3, m_Sex);m_List.SetItemText(nItem, 4, m_Phone);UpdateData(FALSE); // 显示数据MessageBox(_T("添加成功"));}
}void CAsystemDlg::OnBnClickedSearchB() // 查找功能***
{UpdateData(TRUE); // 将控件中的数据更新到成员变量Msg *search = msg->next; // 从链表的第一个节点开始搜索bool found = false;// 清空 CListCtrl,准备显示搜索结果m_List.DeleteAllItems();int nRow = 0;// 遍历链表搜索匹配项while (search != NULL){bool match = false;// 按学号搜索if (m_ID != L"" && m_ID == search->ID){match = true;}// 按姓名搜索else if (m_Name != L"" && m_Name == search->Name){match = true;}// 按电话搜索else if (m_Phone != L"" && m_Phone == search->Phone){match = true;}if (match){// 在 CListCtrl 中插入匹配的行int nItem = m_List.InsertItem(nRow, search->Class);m_List.SetItemText(nItem, 1, search->Name);m_List.SetItemText(nItem, 2, search->ID);m_List.SetItemText(nItem, 3, search->Sex);m_List.SetItemText(nItem, 4, search->Phone);nRow++;found = true;}search = search->next;}if (found){MessageBox(_T("查找成功"));}else{MessageBox(_T("未找到匹配项"));// 恢复显示所有数据search = msg->next;nRow = 0;while (search != NULL){int nItem = m_List.InsertItem(nRow, search->Class);m_List.SetItemText(nItem, 1, search->Name);m_List.SetItemText(nItem, 2, search->ID);m_List.SetItemText(nItem, 3, search->Sex);m_List.SetItemText(nItem, 4, search->Phone);nRow++;search = search->next;}}UpdateData(FALSE);
}void CAsystemDlg::OnBnClickedModifyB() // 修改功能
{// TODO: 在此添加控件通知处理程序代码UpdateData(TRUE);		 // 从控件中获取数据Msg *search = msg->next; // 假设 msg 是链表的头节点if (search != NULL && m_ID != "") // 只需要输入学号即可进行修改{while (m_ID != search->ID && search->next != NULL){search = search->next;}if (m_ID == search->ID) // 找到匹配的学号{// 更新链表中的数据search->Class = m_Class;search->Name = m_Name;search->ID = m_ID;search->Sex = m_Sex;search->Phone = m_Phone;// 更新 CListCtrl 中的显示int nItem = -1;for (int i = 0; i < m_List.GetItemCount(); i++) // 遍历 CListCtrl 中的所有项{CString itemID;m_List.GetItemText(i, 2); // 假设学号在第3列(索引2)if (itemID == m_ID)		  // 找到匹配的学号{nItem = i;break;}}if (nItem != -1) // 如果找到了匹配的项{// 更新 CListCtrl 中的每一列m_List.SetItemText(nItem, 0, m_Class); // 假设班级在第1列(索引0)m_List.SetItemText(nItem, 1, m_Name);  // 假设姓名在第2列(索引1)m_List.SetItemText(nItem, 2, m_ID);	   // 假设学号在第3列(索引2)m_List.SetItemText(nItem, 3, m_Sex);   // 假设性别在第4列(索引3)m_List.SetItemText(nItem, 4, m_Phone); // 假设电话在第5列(索引4)}MessageBox(L"修改成功");}else{MessageBox(L"未找到匹配的学号");}}else{MessageBox(L"请输入学号");}UpdateData(FALSE); // 更新数据
}void CAsystemDlg::OnBnClickedDeleteB() // 删除功能
{// TODO: 在此添加控件通知处理程序代码// 在链表中查找对应的节点UpdateData(TRUE);Msg *search = msg->next; // 指向链表的第一个有效节点Msg *pri = msg;			 // 指向链表的头节点(哑节点)while (search != NULL){if (search->ID == m_ID){// 找到对应的节点,删除链表中的节点pri->next = search->next;delete search;break;}pri = search;search = search->next;}// 在列表控件中查找对应的项int itemCount = m_List.GetItemCount();for (int i = 0; i < itemCount; ++i){CString itemID = m_List.GetItemText(i, 2); // 假设第一列存储学号if (itemID == m_ID){// 找到对应的项,删除列表控件中的项m_List.DeleteItem(i);break;}}MessageBox(L"删除完毕");UpdateData(FALSE);
}void CAsystemDlg::OnBnClickedBclearall()
{//// TODO: 在此添加控件通知处理程序代码UpdateData(TRUE);m_List.DeleteAllItems();Msg *search = msg->next;Msg *p;msg->next = NULL;while (search != NULL){p = search;search = search->next;delete p;}UpdateData(FALSE);
}void CAsystemDlg::OnBnClickedBclearin()
{// TODO: 在此添加控件通知处理程序代码m_Class = L"";m_Name = L"";m_ID = L"";m_Sex = L"";m_Phone = L"";UpdateData(FALSE);
}void CAsystemDlg::OnBnClickedCancel()
{fstream File;File.open("message.csv", ios::out);// 写入表头File << "Class,Name,ID,Sex,Phone\n";// 从第一个有效节点开始保存Msg *search = msg->next;while (search != NULL){CStringA strClass(search->Class);CStringA strName(search->Name);CStringA strID(search->ID);CStringA strSex(search->Sex);CStringA strPhone(search->Phone);// 写入File << strClass.GetString() << ","<< strName.GetString() << ","<< strID.GetString() << ","<< strSex.GetString() << ","<< strPhone.GetString() << "\n";search = search->next; // 往复循环}File.close();MessageBox(L"通讯录操作已保存");CDialogEx::OnCancel();
}void CAsystemDlg::OnEnChangeEID()
{// TODO:  如果该控件是 RICHEDIT 控件,它将不// 发送此通知,除非重写 CDialogEx::OnInitDialog()// 函数并调用 CRichEditCtrl().SetEventMask(),// 同时将 ENM_CHANGE 标志"或"运算到掩码中。// TODO:  在此添加控件通知处理程序代码
}void CAsystemDlg::OnLbnSelchangeLall()
{// TODO: 在此添加控件通知处理程序代码
}void CAsystemDlg::OnLvnItemchangedList2(NMHDR *pNMHDR, LRESULT *pResult)
{LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);// TODO: 在此添加控件通知处理程序代码*pResult = 0;
}// 添加鼠标移动消息处理函数
void CAsystemDlg::OnMouseMove(UINT nFlags, CPoint point)
{MSG msg;msg.hwnd = m_hWnd;msg.message = WM_MOUSEMOVE;msg.wParam = nFlags;msg.pt = point;msg.lParam = MAKELPARAM(point.x, point.y);m_ToolTip.RelayEvent(&msg);CDialogEx::OnMouseMove(nFlags, point);
}// 添加PreTranslateMessage函数实现
BOOL CAsystemDlg::PreTranslateMessage(MSG *pMsg)
{if (m_ToolTip.GetSafeHwnd())m_ToolTip.RelayEvent(pMsg);return CDialogEx::PreTranslateMessage(pMsg);
}void CAsystemDlg::OnEnChangeEnumber()
{// TODO:  如果该控件是 RICHEDIT 控件,它将不// 发送此通知,除非重写 CDialogEx::OnInitDialog()// 函数并调用 CRichEditCtrl().SetEventMask(),// 同时将 ENM_CHANGE 标志"或"运算到掩码中。// TODO:  在此添加控件通知处理程序代码
}void CAsystemDlg::OnBnClickedButton1() // reset功能
{// TODO: 在此添加控件通知处理程序代码UpdateData(TRUE);// 清空表格所有内容m_List.DeleteAllItems();// 从链表中重新读取数据Msg *current = msg->next;int nRow = 0;// 重新填充表格while (current != NULL){// 插入新行并设置第一列int nItem = m_List.InsertItem(nRow, current->Class);// 设置其他列的值m_List.SetItemText(nItem, 1, current->Name);m_List.SetItemText(nItem, 2, current->ID);m_List.SetItemText(nItem, 3, current->Sex);m_List.SetItemText(nItem, 4, current->Phone);current = current->next;nRow++;}UpdateData(FALSE);
}

http://www.dtcms.com/a/496148.html

相关文章:

  • 东莞网站优化一般多少钱深圳网站seo优化公司
  • 免费制作app生成器网站馆陶网站建设电话
  • 从发币到行为经济:BSC 发币工具演化的下一站
  • 优秀企业网站wordpress导航怎么设置
  • 自己的主机做服务器网站如何备案企业融资流程
  • 通过强化学习让多模态大模型自主决策图像token压缩的新范式-VisionThink实现思路及奖励函数设计
  • 【C++】深入理解vector(1):vector的使用和OJ题
  • 前端最新Vue2+Vue3基础入门到实战项目9-10
  • UC3842/3845/2842/2845 软启动
  • 免费推广产品的网站年报申报入口官网
  • 做网站答辩三网合一营销型全网站
  • (定时任务)@Scheduled 到 XXL-Job:两种定时任务机制的核心区别
  • 【VSCode】Visual Studio Code 2024安装包及安装教程 (附所有版本下载)
  • java17中,使用原生url connection的方式去创建的http链接,使用的是http1.1还是2.0?
  • 无人机激光避障技术概述
  • 网站空间带宽t型布局网站的样子
  • 【测试】Web安全测试与自动化筛查
  • 上海黄浦 网站建设wordpress图床首页无缩略图
  • 免费手机建站平台杭州最大定制app开发公司
  • asp做的网站后台怎么进去wordpress文章推送公众号
  • Scrapy vs Requests:什么时候该用哪个爬虫框架?
  • 网站建设的步骤是什么赣州58同城网
  • 我的钢铁网网站架构jsp语言做网站
  • JavaSE基础——第十一章 常用类(一)
  • 建设网站托管费用wap手机网站描述正确的是
  • linux问题定位之寄存器篇
  • axios 的二次封装
  • linux系统编程(十②)RK3568 socket之 TCP 客户端的实现
  • 网站如何提交关键词asp网站只能打开首页
  • 门店管理网站建设wordpress 爬虫 插件