【mfc】不同对话框之间互相操控、全局变量与日期控件

首先先改良一下上次在《【mfc】利用文件的读写,theApp全局变量来现实登录帐号管理系统》(点击打开链接)中提到的一种方法:为了解决mfc模态对话框在任务栏中不显示的缺陷,于是在一些模态对话框中的OnInitDialog()初始化函数中,使用SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE, WS_EX_APPWINDOW);这样虽然能够实现效果,但是在每一个模态对话框都要添加这句话那不是累死?其实如下图的解决方式:

打开新建mfc工程就创建的CxxApp类,把旗下的InitInstance()中的m_pMainWnd=&dlg;删掉或者注释掉,以后所有模态对话框都在原来对话框隐藏的时候,都会有标题了。这句话默认是存在的。它没有考虑到我们使用模态对话框的时候,会把这个主对话框隐藏掉所致。

这期,主要为大家带来在mfc如何实现不同对话框之间互相操控与全局变量的定义,还有日期控件的使用,继续上次在《【mfc】利用文件的读写,theApp全局变量来现实登录帐号管理系统》(点击打开链接)中的工程,里面还有“学生管理”这个按钮没有做完,首先在CIsysDlg主对话框中添加Button3学生管理的消息映射函数,这个与以前的工程一样,甚至代码都一样,不讲了:

#include "InfoDlg.h"void CIsysDlg::OnButton3() {ShowWindow(SW_HIDE);CInfoDlg dlg;dlg.DoModal();ShowWindow(SW_SHOW);}其中,一会儿我们画出来的对话框添加的类名就是CInfoDlg。

一、基本目标

实现下面的功能,学生信息管理,点击添加按钮会弹出一个模态对话框“添加信息”,里面有姓名、班级、出生日期,其中姓名是不允许相同的,然后,在“添加信息”对话框点击“添加”按钮,会把消息插入到“学生信息管理”对话框。“添加信息”对话框里面使用到了编辑框、下拉列表与日期控件,这个日期控件能够自己输入与选择。而在“学生信息管理”对话框,选中信息之后,点击“删除按钮”则能够删除信息。

二、制作过程

1、首先画出学生信息管理对话框,怎么添加在《【mfc】用对话框分页实现用户登录》(点击打开链接)讲过,里面包含四个按钮与列表控件,注意把这个列表控件设置成单选,自带的两个“确定”、“取消”按钮请自行删除,本期主要实现“添加”与“删除”按钮功能,为这个对话框添加类CInfoDlg,“打开”与“保存”留到之后再做,按钮的快捷键是如何添加、如何为对话框添加类,在《【mfc】利用文件的读写,theApp全局变量来现实登录帐号管理系统》(点击打开链接)已经说过。

2、之后画出“添加信息”控件,这个对话框里面包含三个静态文本、一个编辑框,一个下拉列表,还有一个日期控件,为这个对话框添加CInfoApp类

3、日期控件如下图添加:

4、把这个日期控件的样式改成如下所示,格式是“长日期”,其他默认就行,你选择“使用旋转控件”也行,个人喜好吧,反正之后的代码没有不同,个人觉得默认的样式比较好看一点。日期控件默认就能够自己输入,也能够自己选择日期。

5、之后就开始写代码了,因为我们首先要“学生信息管理”对话框中的列表控件初始化,所以我们要为CInfoDlg添加初始化OnInitDialog()函数,同时我们为了不用每次操作这个列表都要声明一次CListCtrl* plist=(CListCtrl*)GetDlgItem(IDC_LIST1);然后用plist->方法去操作,因此,我们首先如下图在CInfoDlg头文件中加入一个CListCtrl*

然后回到OnInitDialog()中使用一句m_List.SubclassDlgItem(IDC_LIST1,this);,以后在所有本对话框的所有函数,都能够用m_List去操控列表控件了。初始化列表控件的方法,与之前的《【mfc】学生信息管理,实现List控件节点的增删改查》(点击打开链接)一样,只是不再是plist->去调用,而是m_List中的成员了。

BOOL CInfoDlg::OnInitDialog() {CDialog::OnInitDialog();// TODO: Add extra initialization here//现在本对话框的头文件中登录一个CListCtrl m_List;//然后,利用此方法获取其某控件的ID就可以使用了//不必每次都用声明的CListCtrl* plist=(CListCtrl*)GetDlgItem(IDC_LIST1);中的plist->方法去操作m_List.SubclassDlgItem(IDC_LIST1,this);m_List.InsertColumn(0,"姓名",0,100);m_List.InsertColumn(1,"班级",0,100);//出生日期的列扩大一些m_List.InsertColumn(2,"出生日期",0,200);return TRUE; // return TRUE unless you set the focus to a control// EXCEPTION: OCX Property Pages should return FALSE}出生日期那一列扩大一点,毕竟日期是比较大的

6、之后是“学生信息管理”对话框中的“添加”按钮的消息映射函数,这个按钮是弹出一个CInfoAddDlg的模态框的,为了在“添加”对话框中能够操作“学生信息管理”这个对话框中的控件,,我们先要打开CInfoAddDlg.h进行如下图的操作

之后为“学生信息管理”对话框中的“添加”按钮添加消息映射函数OnButton1():

#include "InfoAddDlg.h"void CInfoDlg::OnButton1() {// TODO: Add your control notification handler code hereCInfoAddDlg dlg;//在添加信息的对话框的头文件InfoAddDlg.h中加了一个指向本对话框的指针//以便在添加信息的对话框能够操纵本对话框中的listdlg.m_InfoDlg=this;dlg.DoModal();}7、“学生信息管理”对话框中的“删除”按钮,写完整个添加对话框中的内容再回来写,这个”添加“对话框中的”下拉列表“是要初始化的,为本对话框添加一个初始化OnInitDialog()函数,里面”下拉列表“的初始化与《【mfc】利用文件的读写,theApp全局变量来现实登录帐号管理系统》(点击打开链接)的是一模一样,只是”普通”、“高级”变成了“1”、“2”而已

有了你,我不再作孤飞于蓝天的雄鹰,

【mfc】不同对话框之间互相操控、全局变量与日期控件

相关文章:

你感兴趣的文章:

标签云: