MFC实现多界面切换
来源:互联网 发布:linux内核的系统 编辑:程序博客网 时间:2024/06/05 19:20
MFC有模态对话框和非模态对话框之区别。但是仅仅这些根本满足不了多功能、具有美观的程序开发。我们在开发中往往会遇到类似Android那样的界面(点击一个按钮切换到另一个界面)。在网上查一下,只有这篇文章点击本文字查看
虽然使用MFC的标签对话框也可以实现这样的功能,个人认为创建出来的界面有点丑,还不能随心所欲的创建切换按钮。
我也是根据这篇文章实现了一个三个界面之间切换的小程序
首先要创建四个对话框,
一个对话框要作为基类,一些属性设置:
Appearance :
Border:None(也可以为Dialog Frame)
Style : Popup
其他三个对话框,其中有一个设置为:
Appearance :
Border : None
Style : Popup(这样设置此对话框可以在显示屏任意位置显示)
其他两个对话框:
Appearance :
Border : None
Style : Child(必须是这样否则会显示出错,这样设置对话框只能显示在Base对话框上)
base对话框
CBaseDlg.h
/*// 加载多界面*///#define MULTI_DLGclass CBaseDlg : public CDialog{ ...... public: CShowPictureDlg *m_ShowPic; CAutoAddDlg *m_AutoAdd; CMyProgressCtrl *m_MyProgress; enum { DLG_SHOWPICTURE = 0, DLG_AUTOADD, DLG_MYPROGRESS }; ///加载界面 BOOL AddPage(CDialog * pDlg, UINT ID); ///切换界面 void ShowPage(int CurrentPage); //////添加多界面 CDialog *m_pDlgPages[2];///自定义需要显示的界面个数 UINT m_DlgIDD[2]; ///每个对话框对应的ID};
实现文件 .cpp
BOOL CBaseDlg::AddPage(CDialog * pDlg, UINT ID){#ifdef MULTI_DLG m_pDlgPages[m_nDlgPageIdx]=pDlg; m_DlgIDD[m_nDlgPageIdx]=ID; m_pDlgPages[m_nDlgPageIdx]->Create(ID, this); m_pDlgPages[m_nDlgPageIdx]->MoveWindow(&m_ShowRect); m_nDlgPageIdx++;#else ///初始化两个界面 m_ShowPic = new CShowPictureDlg; m_ShowPic->Create(IDD_DIALOG_SHOWPICTURE, this); GetWindowRect(m_ShowRect); m_ShowRect=CRect(0, 0, m_ShowRect.Width(), m_ShowRect.Height());/// m_ShowPic->MoveWindow(m_ShowRect); m_ShowPic->ShowWindow(SW_HIDE); m_MyProgress = new CMyProgressCtrl; m_MyProgress->Create(IDD_DIALOG_PROGRESS, this); GetWindowRect(m_ShowRect); m_ShowRect=CRect(560, 10, 1360, 220);/// m_MyProgress->MoveWindow(m_ShowRect); m_MyProgress->ShowWindow(SW_HIDE); m_AutoAdd= new CAutoAddDlg; m_AutoAdd->Create(IDD_AUTOADD_DIALOG, this); m_AutoAdd->ShowWindow(SW_SHOW); GetWindowRect(m_ShowRect); m_ShowRect=CRect(20, 60, m_ShowRect.Width()-50, m_ShowRect.Height()-50);/// m_AutoAdd->MoveWindow(m_ShowRect);#endif return TRUE;}void CBaseDlg::ShowPage(int CurrentPage){ switch (CurrentPage) { case DLG_SHOWPICTURE: { m_AutoAdd->ShowWindow(SW_SHOW); m_ShowPic->ShowWindow(SW_HIDE); m_MyProgress->ShowWindow(SW_HIDE); SetTimer(1, 1000, NULL); } break; case DLG_AUTOADD: { m_AutoAdd->ShowWindow(SW_HIDE); m_MyProgress->ShowWindow(SW_HIDE); m_ShowPic->ShowWindow(SW_SHOW); KillTimer(1); } break; case DLG_MYPROGRESS: { m_AutoAdd->ShowWindow(SW_HIDE); m_ShowPic->ShowWindow(SW_HIDE); m_MyProgress->ShowWindow(SW_SHOW); m_MyProgress->SetBackground(); KillTimer(1); } break; }}
其他对话框页面切换,包含以下base类头文件,创建一个按钮或者其他控件然后添加下面代码即可
CBaseDlg *pMMD = (CBaseDlg*)AfxGetMainWnd(); pMMD->ShowPage(0);//跳到setup对话框
在这里我创建的m_MyProgress 就是Style 是非Child的对话框,我在设置对话框位置时,使用的坐标是屏幕坐标,而其他子页面坐标都是以base界面为基础。
0 0
- MFC实现多界面切换
- MFC界面切换
- MFC切换子界面
- android实现多界面左右滑动切换
- Qt的“QStackedLayout”实现多界面切换
- IOS实现界面切换
- Android实现 界面切换
- MFC实现多TAB页的切换
- MFC实现MDI多视图界面 (一)
- MFC - 资源文件实现多语言界面
- MFC多国语言界面的实现
- mfc 按钮 实现多个界面跳转
- MFC实现多个界面跳转
- MFC实现多个界面跳转
- QT实现界面跳转切换
- Xcode6 下实现界面切换
- ViewFlipper实现界面切换效果
- RadioGroup+Fragment实现界面切换
- javascript canvas 绘图 2d 渐变 阴影
- Android实现RecyclerView侧滑删除和长按拖拽
- VLfeat win10 vs2015 编译
- 基础碰撞检测01
- 加密(MD5加密和HAMC加密)
- MFC实现多界面切换
- STM32 GPIO管脚模式的设置及使用方法
- 利用uboot启动远程Kernel(TFTP)以及挂载远程ROOTFS(NFS)
- 安卓 集成环信EaseUI导致V4jar包冲突
- Dialog对话框
- Maven简介
- CentOS6.2操作的一些内容积累
- 写入mysql数据库
- windows端使用ssh和Xming远程连接ubuntu端调试ROS