MFC程序设计(二)基于对话框编程

从现在开始,我们将以基于对话框的MFC应用程序来讲解MFC应用

向导生成基于对话框MFC应用程序

对话框是一种特殊类型的窗口,绝大多数Windows程序都通过对话框与用户进行交互。在Visual C++中,对话框既可以单独组成一个简单的应用程序,又可以成为文档/视图结构程序的资源。

创建流程

项目属性修改:

1.属性->C/C++/代码生成/运行库->MTD ,Spectre缓解->禁用,

2.属性->高级->MFC的使用->在静态库中使用MFC

资源视图

查找方法一:

查找方法二:

在 MFC中,与用户进行交互的对话框界面被认为是一种资源。

这些资源只是一个类似UI文件的东西,只有外观而不具有功能,因此资源默认没有.h文件和.cpp文件关联。

基于对话框的MFC应用程序以窗口作为操作单位,当我们使用对话框等窗口时,需要为其添加类,以便我们以面向对象的方式处理窗口的行为。静态文本等控件是窗口的组成部分,也就是窗口类的成员,所以当我们使用控件时,需要为控件绑定变量,这使得我们可以通过变量来操作控件。

Dialog中存储的是对话框界面的ID,当我们双击ID时,对话框设计界面就会显示出来。

注意:ID为每个控件的唯一标识

这是ID为IDD_ABOUTBOX的对话框设计界面

这是ID为IDD_DIALOG_DIALOG的对话框设计界面,这是我们MFC程序默认生成的对话框

类视图

在类视图中,可以看到向导生成了3 个类:CAboutDlg,CDialogApp和CDialogDlg。

1.CAboutDlg:向导生成的关于版本信息对话框类。

2.CDialogApp:应用程序类,从 CWinApp 继承过来,封装了初始化、运行、终止该程序的代码。

3.CDialogDlg:对话框类,从CdialogEx继承过来的,在程序运行时看到的对话框就是它的一个具体对象。

在CDialogDlg对话框类中存在以下两个重要的函数:

1.DoDataExchange函数:该函数主要完成对话框数据的交换和校验。

2.OnInitDialog函数:对话框初始化处理函数

设计界面和工具箱

我们可以将工具箱中的工具拖入对话框中进行设计对话框

对话框属性修改

我们通过此方便找到了对话框的属性页,在这里进行对话框属性进行修改,这比使用代码修改方便的多

我们通过修改对话框属性页的描述文字修改了对话框的名字

注意:通过属性页修改属性的方法适用于所有的控件

对话框

对话框简介

本文使用基于对话框的MFC应用程序,MFC由C++封装而成,因此每个对话框在使用的时候需要为其添加类

对话框分为模态对话框和非模态对话框两种形式

模态对话框是一种会阻塞父窗口操作的对话框,当模态对话框弹出时,用户必须先对其进行操作,完成或关闭该对话框后才能继续与父窗口或其他窗口进行交互。

非模态对话框是不会阻塞父窗口操作的对话框,用户可以在不关闭该对话框的情况下继续与父窗口或其他窗口进行交互。

对话框应用

本应用实现通过点击不同的按钮弹出相应的对话框

步骤一:通过工具箱在界面上放两个个Button

我们清空了该对话框中的默认控件,然后通过工具栏添加了两个按钮并通过属性页修改了它的名字。我们同样也可以直接点击按钮然后打字修改名字

步骤二:添加两个对话框

资源视图 -> Dialog -> 右击 -> 插入

点击插入即可添加一个对话框

如图便是我们添加的两个对话框。

步骤三:使模态对话框关联类

点击对话框模板 -> 右击 -> 添加类

类视图中多了一个自定义类CDlgExec

在CDlgExec.h文件中,通过此方式将模态对话框与类关联

步骤四:按钮处理函数创建对话框,以模态方式运行

如下有四种方式生成处理函数

方法一:

方法二:

注意该按钮在哪个对话框,就要把他放在相应对话框的类里。

方法三:

直接双击按钮,VS便自动为我们生成了事件,但这种方式只能生成单击事件

方法四:

这是生成的处理函数

步骤五:弹出模态对话框

当处理函数需要使用别的控件,如对话框时,需要把它所属的类的头文件包含在定义事件的.cpp文件中

实现模态对话框的创建需要调用CDialog类的成员函数CDialog::DoModel,该函数的功能就是创建并显示一个对话框

步骤六:使非模态对话框关联类

在CDlgShow.h文件中,通过此方式将模态对话框与类关联

步骤七:添加非模态对话框按钮点击事件

步骤八:弹出非模态对话框

 

CDioalog.h类中声明对话框对象

在CDioalog.cpp中引用DlgShow.h

放在主对话框类的构造函数中创建非模态对话框,目的只创建一次对话框

定义事件处理函数

完成以上步骤以后,运行程序,我们点击模态对话框按钮就会弹出模态对话框,点击非模态对话框按钮弹出非模态对话框。

静态文本

静态文本简介

静态文本框是最简单的控件,它主要用来显示文本信息,不能接受用户输入,一般不需要连接变量,也不需要处理消息。

静态文本框的重要属性有:

1.ID:所有静态文本框的缺省ID都是IDC_STATIC,静态ID,不响应任何消息(事件)

2.Caption:修改显示的内容

常用接口:

接口

功能

CWnd::SetWindowText

设置控件内容

CWnd::GetWindowText

获取控件内容

CStatic::SetBitmap

设置位图(后缀为bmp的图片)

在属性中可修改静态文本的文字,也可点击静态文本控件直接写内容

静态文本应用一

当点击呵呵按钮时,静态文本变成呵呵,当点击获取按钮时,弹窗显示静态文本内容内容

关联控件变量:

静态文本等控件需要绑定变量是为了在我们实现点击按钮的功能时,能够找到该控件对象,然后实现相关功能

注意:XXX_STATIC形式ID为静态ID,不能关联变量。因此当我们需要给静态文本添加变量时,需要把ID修改,再关联变量:

此时,CStaticText.cpp便实现了静态文本控件和变量的关联:ID和变量名绑定

实现按钮设置功能:双击设置按钮进入处理函数

实现按钮显示功能:双击显示按钮进入处理函数

此时运行程序,点击按钮便正常设计和显示了

静态文本应用二

利用静态文本显示图片,只能显示位图(后缀.bmp)

一.将要显示的位图放置当前mfc项目所在的文件夹下:1.bmp

二.将该静态文本添加变量m_label,以便能够控制该文本

三.在目标窗口初始化函数中进行初始化

按钮

按钮简介

按钮是最常见的、应用最广泛的一种控件。按钮一般用于在程序执行期间,当单击某个按钮后就会执行相应的消息处理函数。按钮的主要属性是Caption,来设置在按钮上显示的文本。

常用接口:

接口

功能

CWnd::SetWindowText

设置控件内容

CWnd::GetWindowText

获取控件内容

CWnd::EnableWindow

设置控件是否变灰

命令按钮处理的最多的消息是:BN_CLICKED,双击按钮即可跳转到处理函数。或者通过按钮属性 -> 控制事件 -> 选择所需事件,添加处理函数

应用

点击按钮修改按钮内容并弹窗显示内容

添加按钮事件处理函数

关联按钮控件变量

实现事件处理函数

编辑框

编辑框简介

MFC控件绑定变量由两种方式:值类型和控件类型,编辑框一般绑定值类型

常用属性设置:

属性

含义

Number

True只能输入数字

Password

True密码模式

Want return

True接收回车键,自动换行,只有在多行模式下,才能换行

Multiline

True多行模式

Auto VScroll

True 当垂直方向字符太多,自动出现滚动条,同时设置Vertical Scroll才有效

Vertical Scroll

True当垂直方向字符太多,自动出现滚动条,和Auto VScroll配合使用

Horizontal Scroll

True当垂直方向字符太多,自动出现滚动条,和Auto HScroll配合使用

Read Only

True 只读

常用接口:

接口

功能

CWnd::SetWindowText

设置控件内容

CWnd::GetWindowText

获取控件内容

应用一

我们将实现在上面的编辑框输入内容点击copy按钮,下方的编辑框出现相同内容。点击clos按钮窗口关闭

上方编辑框关联控件变量

下方编辑框关联控件变量

在主对话框类OnInitDialog()中,对上方的编辑框设置默认内容

注意:任何控件初始化都在主对话框类中OnInitDialog函数进行初始化

定义copy按钮事件处理函数

定义close按钮事件处理函数

小插曲

当我们设置一个普通的编辑框时,在该编辑框点击回车键时,窗口会关闭,这时是窗口的行为而非编辑框的行为。

为解决该问题,我们需要重写窗口的onOK处理函数

此时当我们在普通的编辑框点击回车键时,窗口不会再退出了

应用二

编辑框绑定值类别变量,点击设置按钮可以设置编辑框的内容,点击获取按钮获取编辑框的内容。

1.编辑框绑定变量:值类别CString类型变量。

编辑框添加了一个值类别的变量,则该变量就表示这个编辑框,编辑框中显示的内容就是变量的值。

2.实现设置按钮事件处理函数

3.实现获取按钮事件处理函数

应用三

实现点击读按钮,编辑框显示文件内容。点击写按钮,编辑框内容写入文件。点击查询按钮,编辑框显示目标文件内容

1.编辑框添加变量

2.代码实现读写按钮事件处理函数

此时,点击读按钮,编辑框显示文件内容

3.代码实现写按钮事件处理函数

4.代码实现查询按钮事件处理函数

传统方式

新型方式

下拉框

下拉框简介

常用属性设置:

属性

含义

data

设置内容,不同内容间用英文的分号“;”分隔

type

显示风格

Sort

True 内容自动排序

常用接口:

接口

功能

CComboBox::AddString

组合框添加一个字符串

CComboBox::SetCurSel

设置当前选择项(当前显示第几项),下标从0开始

CComboBox::GetCurSel

获取组合框中当前选中项的下标

CComboBox::GetLBText

获取指定位置的内容

CComboBox::DeleteString

删除指定位置的字符串

CComboBox::InsertString

在指定位置插入字符串

下拉框的内容可通过属性页中数据项进行设置

应用一

下拉框并不作为功能实现,而是形式存在

代码实现下拉框中值的添加

1.添加变量

2.在主对话框中进行初始化

应用二

在下拉框属性页控件事件中有一CBN_SELCHANGE事件,当切换下拉框选项时,可以触发该事件。现我们利用该事件,使得切换下拉框选项时可以弹窗显示选项内容

菜单

1.添加菜单资源:

如图便是我们创建的菜单,ID为IDR_MENU1

2.主对话框绑定菜单

此时运行程序便有了菜单

应用

点击菜单项3弹窗

1.添加菜单项3事件处理函数

2.代码实现时间处理函数

列表

列表简介

常用属性设置:view -> Report(报表方式)

常用接口:

接口

功能

CListCtrl::SetExtendedStyle

设置列表风格

CListCtrl::GetExtendedStyle

获取列表风格

CListCtrl::InsertColumn

插入某列内容,主要用于设置标题

CListCtrl::InsertItem

在某行插入新项内容

CListCtrl::SetItemText

设置某行某列的子项内容

CListCtrl::GetItemText

获取某行某列的内容

应用一

接下来我们将对这个列表填充内容

1.添加变量

2.列表初始化

应用二

实现一个目录文件显示器,此处列表为report视图

1.添加变量

2.列表初始化

3.添加菜单

获取文本:弹窗选中行0列文本,并修改文本

删除一行:删除选中行数据

删除全部:删除全部数据

4.添加列表右键事件处理函数

5.添加菜单选项事件处理函数

树简介

常用属性设置:

属性

含义

has buttons

True 有展开按钮

has lines

True 有展开线

lines at root

True 有根节点

常用接口:

接口

功能

AfxGetApp()

获取应用程序对象指针

CWinApp::LoadIcon

加载自定义图标

CImageList::Create

创建图像列表

CImageList::Add

图像列表追加图标

CTreeCtrl::SetImageList

设置图形状态列表

CTreeCtrl::InsertItem

插入节点

CTreeCtrl::SelectItem

设置默认选中项

CTreeCtrl::GetSelectedItem

获取选中项

CTreeCtrl::GetItemText

获取某项内容

应用一

将上述树控件初始化为下图所示:

1.关联控件变量

2.把ico资源文件放在项目所在文件夹的res文件夹中

3.对话框添加图标资源(.icon)

4.在对话框头文件中保存图像列表

5.代码初始化树控件

应用二

实现点击节点弹窗的功能

树控件常用事件为:TVN_SELCHANGED,当切换某个节点时,自动触发此事件。

此时,我们点击树节点就会弹窗显示内容。

注意:由于我们在上文设置了树的默认节点,因此当我们运行程序窗口实现前会先弹窗节点的内容

应用三

点击当前选中按钮弹窗弹窗显示当前节点内容并进行修改内容

点击删除选中删除当前节点

点击全部删除按钮清空所有节点

1.添加树变量

2.初始化树控件

3.实现当前选中按钮单击处理事件函数

4.实现当前删除按钮单击处理事件函数

5.实现全部删除按钮单击处理事件函数

标签页

标签页简介

标签页可依赖于主对话框切换对话框,而非弹窗切换对话框

应用一

切换标签页时切换不同的对话框

1.标签页添加变量

2.使用标签页时需要引用外部文件TabSheet.cpp和TabSheet.h(MSDN下载),将这两个文件放置到在项目文件同级目录,并且添加到工程目录中

3.每个标签页都对应一个对话框,我们使用两个标签页因此需要在资源中添加两个对话框

属性页修改:样式:child,边框:None

4.给每个添加的对话框添加类

5.主对话框.h文件中, 定义自定义类对象,需要相应头文件

6.主对话框.cpp文件添加头文件并实现代码

此时运行程序便可通过标签页切换不同的对话框了

应用二

1.标签页添加变量

2.添加三个标签页,即对话框,并添加类

对话框属性:外观:None,样式:Child

对话框类名依次CPAGE1,CPAGE2,CPAGE3

3.主对话框.cpp文件包含三个对话框的头文件

4.主对话框.h文件创建三个对话框的对象

5.标签页在主对话框.cpp文件中初始化

6.实现切换页的事件处理函数

此时切换页就可以正常显示对话框了

进度条与滑块

简介

应用

实现点击进入按钮进度条加载,拉动滑块控制进度条进度

1.添加变量

进度条添加变量

滑块添加变量

2.代码初始化滑块和进度条

3.代码实现进度按钮处理函数

4.代码实现滑块控制进度条功能

单选按钮

应用一

点击获取按钮弹窗显示选中的单选按钮

1.为按钮1,2,3分别添加变量m_Bn1,m_Bn2,m_Bn3

2.代码实现获取按钮事件处理函数

应用二

点击任意单选按钮为单选按钮4赋值,点击获取按钮弹窗单选按钮4的值

1.为按钮4,5,6分别添加值类别变量m_Bn4,m_Bn5,m_Bn6

2.代码实现单选按钮及获取按钮的事件处理函数

IP控件

IP 控件:用于让用户输入和显示 IP 地址的可视化控件

现针对以上功能进行应用实现

应用一

点击设置按钮设置IP地址

1.IP控件添加变量

2.代码实现设置按钮点击处理事件

应用二

点击清除按钮,清除设置的IP地址

添加清除按钮点击事件处理函数

应用三

点击获取按钮,将已知的的IP地址设置到IP控件中

添加获取按钮点击处理事件

作业

 1.使用MFC搜索D盘获取指定文件并且读取到程序内,显示在列表上

初始化     

	m_List.InsertColumn(0, L"Path", 0, 400);

功能实现

CString RealFilePath = L"0";
CString FileFind(CString FilePath, CString FileName)
{CFileFind finder;FilePath = FilePath + L"\\*.*";BOOL bRet = finder.FindFile(FilePath);while (bRet){bRet = finder.FindNextFileW();if (finder.IsDots())//当遍历到特殊目录时跳过本次循环{continue;}CString strName = finder.GetFileName();CString strPath = finder.GetFilePath();if (finder.IsDirectory())//当目标文件是目录时{FileFind(strPath, FileName);}if (strName == FileName){RealFilePath = strPath;}}return RealFilePath;
}void CMFCApplication2Dlg::OnBnClickedButton1()
{CString FilePath = FileFind(L"D:", L"QQ浏览器截图20240814104659.png");m_List.InsertItem(0, FilePath, NULL);
}

2.自己随便写点什么,练习树控件的使用;

此处我们只是简单的实现了一个树的基本框架并没有实现相关功能

	HTREEITEM hRoot1 = m_Tree.InsertItem(L"祖父", TVI_ROOT, TVI_LAST);HTREEITEM hRootSubNode1 = m_Tree.InsertItem(L"父亲", hRoot1, TVI_LAST);HTREEITEM hRootSubNodeSub1 = m_Tree.InsertItem(L"儿子", hRootSubNode1, TVI_LAST);HTREEITEM hRoot2 = m_Tree.InsertItem(L"祖母", TVI_ROOT, TVI_LAST);HTREEITEM hRootSubNode2 = m_Tree.InsertItem(L"母亲", hRoot2, TVI_LAST);HTREEITEM hRootSubNodeSub2 = m_Tree.InsertItem(L"女儿", hRootSubNode2, TVI_LAST);

3.模仿任务管理器,实现一个多Tab的程序

4.使用MFC搜索D盘获取指定文件并且读取到程序内,显示在Edit上

CString RealFilePath = L"0";
CString FileFind(CString FilePath, CString FileName)
{CFileFind finder;FilePath = FilePath + L"\\*.*";BOOL bRet = finder.FindFile(FilePath);while (bRet){bRet = finder.FindNextFileW();if (finder.IsDots())//当遍历到特殊目录时跳过本次循环{continue;}CString strName = finder.GetFileName();CString strPath = finder.GetFilePath();if (finder.IsDirectory())//当目标文件是目录时{FileFind(strPath, FileName);}if (strName == FileName){RealFilePath = strPath;}}return RealFilePath;
}void CMFCApplication2Dlg::OnBnClickedButton1()
{CString FilePath = FileFind(L"D:", L"QQ浏览器截图20240814104659.png");m_Edit.SetWindowTextW(FilePath);
}

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

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

相关文章

Flink Gauss CDC:深度剖析存量与增量同步的创新设计

目录 设计思路 1.为什么不直接用FlinkCDC要重写Flink Gauss CDC 2.存量同步的逻辑是什么 2.1、单主键的切片策略是什么 2.2、​​​​​复合主键作切片,怎么保证扫描到所有的数据 3、增量同步的逻辑是什么 4、存量同步结束之后如何无缝衔接增量同步 5、下游…

idea新增java快捷键代码片段

最近在写一些算法题&#xff0c;有很多的List<List这种编写&#xff0c;想着能否自定义一下快捷键 直接在写代码输入&#xff1a;lli&#xff0c;即可看见提示

深度学习-91-大语言模型LLM之基于langchain的模型IO的提示模板

文章目录 1 Model的输入输出2 提示模板2.1 提示模板的特点2.2 提示模板的类型3 使用提示模板3.1 设置环境变量3.2 PromptTemplate提示模板3.2.1 通过from_template方法3.2.2 直接生成提示模板3.2.3 使用提示模板3.2.4 复用提示模板3.3 ChatPromptTemplate聊天提示模板3.3.1 通过…

stm8s单片机(二)外部中断实验

中断优先级 stm8的中断优先级不是固定不变的&#xff0c;stm8的中断分为硬件优先级与软件优先级&#xff1b;当多个中断发生时&#xff0c;cpu会先响应软件优先级高的中断&#xff0c;若软件优先级相同会先响应硬件优先级高的&#xff1b; 其中软件优先级有四个 /*** brief …

社区版Dify实现文生视频 LLM+ComfyUI+混元视频

社区版Dify实现文生视频 LLMComfyUI混元视频 一、 社区版Dify实现私有化混元视频效果二、为什么社区版Dify可以在对话框实现文生视频&#xff1f;LLMComfyUI混元视频 实现流程图&#xff08;重点&#xff09;1. 文生视频模型支持ComfyUI2. ComfyUI可以轻松导出API实现封装3. Di…

helm推送到harbor私有库--http: server gave HTTP response to HTTPS client

harbor私有库访问的是http模式 harbor 2.8版本以上可以存储helm镜像 docker镜像推送的时候需要docker端配置insecure-registries 发现helm推送只能在harbor部署的本机使用localhost才能推送成功&#xff0c;即 helm push xxx.tgz oci://localhost:80/library 使用helm pus…

transformers使用过程问题

transfomers新旧版本冲突&#xff0c;和accelerate、datasets、evaluate这些库直接也经常会发生冲突 我使用了下面的版本&#xff0c;暂时没有冲突&#xff0c;如果有冲突再更新 transformers4.41.2 datasets2.20.0 accelerate0.31.0 evaluate0.4.2pip install transformers安…

svn tag

一般发布版本前&#xff0c;需要在svn上打个tag。步骤如下&#xff1a; 1、空白处右击&#xff0c;选择TortoiseSVN->Branch/tag; 2、填写To path&#xff0c;即tag的路基以及tag命名&#xff08;一般用版本号来命名&#xff09;&#xff1b;填写tag信息&#xff1b;勾选cr…

【JavaSE】(8) String 类

一、String 类常用方法 1、构造方法 常用的这4种构造方法&#xff1a;直接法&#xff0c;或者传参字符串字面量、字符数组、字节数组。 在 JDK1.8 中&#xff0c;String 类的字符串实际存储在 char 数组中&#xff1a; String 类也重写了 toString 方法&#xff0c;所以可以直…

【理解工具调用的流程,本质体现了大模型智能性】

1、工具调用 调用完结果看里面tool_calls 是否为空&#xff0c;不为空就调用工具函数处理&#xff0c; 如果为空就中断循环。大模型返回的message结果智能判断是否继续调用 输入输出如下&#xff1a; 请输入&#xff1a;深圳西安天气 ------------------------------------…

excel实用工具

持续更新… 文章目录 1. 快捷键1.1 求和 2. 命令2.1 查找 vloopup 1. 快捷键 1.1 求和 windows: alt mac : command shift T 2. 命令 2.1 查找 vloopup vlookup 四个入参数 要查找的内容 &#xff08;A2 6xx1&#xff09;查找的备选集 &#xff08;C2:C19&#xff09;…

【C++】模板(进阶)

本篇我们来介绍更多关于C模板的知识。模板初阶移步至&#xff1a;【C】模板&#xff08;初阶&#xff09; 1.非类型模板参数 1.1 非类型模板参数介绍 模板参数可以是类型形参&#xff0c;也可以是非类型形参。类型形参就是我们目前接触到的一些模板参数。 //类型模板参数 …

一文学会YOLO系列算法(从V3到11)实现遥感图像目标检测

目录 前言 数据集介绍 数据集转换 YOLO代码的下载 YOLO的配置 1.数据集的配置 2.模型的配置 YOLO11模型的训练 其它版本YOLO的训练 前言 遥感技术的快速发展&#xff0c;特别是在高分辨率遥感图像的获取能力上的显著提升&#xff0c;已经大大拓宽了遥感数据在环境监测…

图解Git——分布式Git《Pro Git》

分布式工作流程 Centralized Workflow&#xff08;集中式工作流&#xff09; 所有开发者都与同一个中央仓库同步代码&#xff0c;每个人通过拉取、提交来合作。如果两个开发者同时修改了相同的文件&#xff0c;后一个开发者必须在推送之前合并其他人的更改。 Integration-Mana…

【高阶数据结构】布隆过滤器(BloomFilter)

1. 概念 1.1 背景引入 背景&#xff1a;在计算机软件中&#xff0c;一个常见的需求就是 在一个集合中查找一个元素是否存在 &#xff0c;比如&#xff1a;1. Word 等打字软件需要判断用户键入的单词是否在字典中存在 2. 浏览器等网络爬虫程序需要保存一个列表来记录已经遍历过…

【json_object】mysql中json_object函数过长,显示不全

问题&#xff1a;json只显示部分 解决&#xff1a; SET GLOBAL group_concat_max_len 1000000; -- 设置为1MB&#xff0c;根据需要调整如果当前在navicat上修改&#xff0c;只有效本次连接和后续会话&#xff0c;重新连接还是会恢复默认值1024 在my.ini配置文件中新增或者修…

计算机网络 (52)秘钥分配

一、重要性 在计算机网络中&#xff0c;密钥分配是密钥管理中的一个核心问题。由于密码算法通常是公开的&#xff0c;因此网络的安全性主要依赖于密钥的安全保护。密钥分配的目的是确保密钥在传输过程中不被窃取或篡改&#xff0c;同时确保只有合法的用户才能获得密钥。 二、方…

第35天:安全开发-JavaEE应用原生反序列化重写方法链条分析触发类类加载

时间轴&#xff1a; 序列化与反序列化图解&#xff1a; 演示案例&#xff1a; Java-原生使用-序列化&反序列化 Java-安全问题-重写方法&触发方法 Java-安全问题-可控其他类重写方法 Java-原生使用-序列化&反序列化 1.为什么进行序列化和反序列化&#xff1…

MindAgent:基于大型语言模型的多智能体协作基础设施

2023-09-18 &#xff0c;加州大学洛杉矶分校&#xff08;UCLA&#xff09;、微软研究院、斯坦福大学等机构共同创建的新型基础设施&#xff0c;目的在评估大型语言模型在游戏互动中的规划和协调能力。MindAgent通过CuisineWorld这一新的游戏场景和相关基准&#xff0c;调度多智…

Excel 技巧17 - 如何计算倒计时,并添加该倒计时的数据条(★)

本文讲如何计算倒计时&#xff0c;并添加该倒计时的数据条。 1&#xff0c;如何计算倒计时 这里也要用公式 D3 - TODAY() 显示为下面这个样子的 然后右键该单元格&#xff0c;选 设置单元格格式 然后点 常规 这样就能显示出还书倒计时的日数了。 下拉适用到其他单元格。 2&a…