利用CTabCtrl控件在一个对话框切换多个其他的对话框

来源:互联网 发布:远东电缆营销网络 编辑:程序博客网 时间:2024/05/21 06:13

利用CTabCtrl控件切换多个对话框。

(CTabCtrl控件所处在的对话框类名为CBack,其他切换的四个对话框类名分别为:CmytsetDlg (通知),CStudent (学生考试成绩情况),CAddExam(试题管理系统),CMy (学生在线考试情况)

注意:以上4个各类窗口都需要进行以下属性设置:属性名为"Style"设置为“child”.(如果不设置,就不能实现切换窗口的功能)

以下是含有CTabCtrl控件的窗口的代码实现:(CTabCtrl控件变量名:m_BackTab

Back.h

#pragma once// CBack 对话框#include "My.h"#include "Student.h"#include "mytsetDlg.h"#include "afxcmn.h"#include "AddExam.h"class CBack : public CDialogEx{DECLARE_DYNAMIC(CBack)public:CBack(CWnd* pParent = NULL);   // 标准构造函数virtual ~CBack();CmytsetDlg *SeverbDlg;CStudent *Student;CAddExam *AddExam;CMy *my;// 对话框数据enum { IDD = IDD_DIALOG1 };protected:virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持DECLARE_MESSAGE_MAP()public:CTabCtrl m_BackTab;virtual BOOL OnInitDialog();afx_msg void OnTcnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult);afx_msg void OnPaint();};

Back.cpp

// Back.cpp : 实现文件//#include "stdafx.h"#include "mytset.h"#include "Back.h"#include "afxdialogex.h"// CBack 对话框IMPLEMENT_DYNAMIC(CBack, CDialogEx)CBack::CBack(CWnd* pParent /*=NULL*/): CDialogEx(CBack::IDD, pParent){//初始化new出各类的对象SeverbDlg = new CmytsetDlg;Student = new CStudent;my = new CMy;AddExam = new CAddExam;}CBack::~CBack(){}void CBack::DoDataExchange(CDataExchange* pDX){CDialogEx::DoDataExchange(pDX);DDX_Control(pDX, IDC_TAB1, m_BackTab);}BEGIN_MESSAGE_MAP(CBack, CDialogEx)ON_NOTIFY(TCN_SELCHANGE, IDC_TAB1, &CBack::OnTcnSelchangeTab1)ON_WM_PAINT()END_MESSAGE_MAP()// CBack 消息处理程序BOOL CBack::OnInitDialog(){CDialogEx::OnInitDialog();// TODO:  在此添加额外的初始化m_BackTab.InsertItem(0, _T("通告"));//按照0到3顺序插入标题,0为第一个窗口m_BackTab.InsertItem(1, _T("试题管理系统"));m_BackTab.InsertItem(2, _T("学生考试成绩情况"));m_BackTab.InsertItem(3, _T("学生在线考试情况"));m_BackTab.SetCurSel(0);//默认设置显示哪个窗口CRect rect;m_BackTab.GetClientRect(rect);rect.DeflateRect(1, 30, 2, 2);//各个窗口绑定列表框SeverbDlg->Create(IDD_MYTSET_DIALOG, &m_BackTab); Student->Create(IDD_DIALOG2, &m_BackTab);my->Create(IDD_DIALOG3, &m_BackTab);AddExam->Create(IDD_AddExam, &m_BackTab);SeverbDlg->MoveWindow(rect);SeverbDlg->ShowWindow(SW_SHOW);//初始时候,首要显示的对话框return TRUE;  // return TRUE unless you set the focus to a control// 异常:  OCX 属性页应返回 FALSE}//该消息函数在资源视图直接鼠标右键,双击ListCtrl控件而产生void CBack::OnTcnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult){//切换功能实现// TODO:  在此添加控件通知处理程序代码CRect rect;m_BackTab.GetClientRect(rect);rect.DeflateRect(1, 30, 2, 2);int i = m_BackTab.GetCurSel();SeverbDlg->ShowWindow(SW_HIDE);AddExam->ShowWindow(SW_HIDE);Student->ShowWindow(SW_HIDE);my->ShowWindow(SW_HIDE);switch (i){case 0:{SeverbDlg->MoveWindow(rect);SeverbDlg->ShowWindow(SW_SHOW);AddExam->ShowWindow(SW_HIDE);Student->ShowWindow(SW_HIDE);my->ShowWindow(SW_HIDE);break;}case 1:{AddExam->MoveWindow(rect);AddExam->ShowWindow(SW_SHOW);Student->ShowWindow(SW_HIDE);SeverbDlg->ShowWindow(SW_HIDE);my->ShowWindow(SW_HIDE);break;}case 2:{Student->MoveWindow(rect);Student->ShowWindow(SW_SHOW);AddExam->ShowWindow(SW_HIDE);SeverbDlg->ShowWindow(SW_HIDE);my->ShowWindow(SW_HIDE);break;}case 3:{my->MoveWindow(rect);my->ShowWindow(SW_SHOW);AddExam->ShowWindow(SW_HIDE);SeverbDlg->ShowWindow(SW_HIDE);Student->ShowWindow(SW_HIDE);break;}}*pResult = 0;}

效果如图:


阅读全文
0 0
原创粉丝点击