`
haoleng
  • 浏览: 6960 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

MFC中TabControls分页上使用Dialog窗口

    博客分类:
  • C++
阅读更多
首先在tabcontrol控件上添加子项:
m_TabControl.InsertItem(0, _T("页面A"));
m_TabControl.InsertItem(1, _T("页面B"));

然后在tabcontrol上创建分页:
m_page0.Create(IDD_DIALOG1, &m_TabControl);
m_page1.Create(IDD_DIALOG2, &m_TabControl);

下面需要初始化在tabcontrol上显示第一页的m_page0窗口。
m_page0.SetWindowPos(&wndTop, 5, 25, pageRect.right - pageRect.left -        10, pageRect.bottom - pageRect.top - 30, SWP_SHOWWINDOW);

然后,当用户点击控件抬头的子项时,控件m_tabControl会对其父窗体发送TCN_SELCHANGE消息,引发OnSelchange(NMHDR *pNMHDR, LRESULT * pResult)事件。我们需要在该事件中保证分页会同步更新。
void CAppDlg::OnSelchangeTab(NMHDR *pNMHDR, LRESULT * pResult)
{
         RECT pageRect;
	m_TabControl.GetWindowRect(&pageRect);
	m_page0.ShowWindow(SW_HIDE);
	m_page1.ShowWindow(SW_HIDE);//隐藏所有分页
	switch(m_TabControl.GetCurSel()){
	case 0:
		m_page0.SetWindowPos(&wndTop, 5, 25,
			pageRect.right - pageRect.left - 10, pageRect.bottom - pageRect.top - 30, SWP_SHOWWINDOW);

		break;
	case 1:
		m_page1.SetWindowPos(&wndTop, 5, 25,
			pageRect.right - pageRect.left - 10, pageRect.bottom - pageRect.top - 30, SWP_SHOWWINDOW);
		break;//各自显示
	}
	*pResult = 0;
}

最后,当我们需要自己在代码中选择具体的子项时,会发现系统没有自动引发OnSelchangeTab事件。我们需要自己构造由m_tabControl发给父窗体的消息并发送出去。
m_TabControl.SetCurSel(1);
NMHDR nmhdr;      
nmhdr.code = TCN_SELCHANGE;      
nmhdr.hwndFrom = m_TabControl.GetSafeHwnd();      
nmhdr.idFrom = IDC_TAB1;
::SendMessage(this->GetSafeHwnd(),WM_NOTIFY,MAKELONG(TCN_SELCHANGE,0),(LPARAM)(&nmhdr));

另外,对于在tabcontrol控件上显示的dialog窗体,注意其sytle必须为child。
还有一点,如果tabcontrol控件的父窗体style为child时,我们会发现,如果控件上显示的dialog窗体上有EditBox,运行后EditBox用户会选不中,无法编辑。所以需尽量避免这种情况。
分享到:
评论

相关推荐

    MFC 在Dialog窗口下画点,圆,弧线

    在本教程中,我们将探讨如何在MFC的Dialog窗口上实现鼠标点击事件,以便用户可以自由地选择三个点,并在Dialog窗口上绘制圆和弧线。这涉及到对图形绘制的基本理解,以及MFC中对话框类和消息处理的掌握。 首先,我们...

    MFC中使用Tab控件实现选项卡,外加图像控件显示图像

    MFC 中使用 Tab 控件实现选项卡,外加图像控件显示图像 在 MFC 中使用 Tab 控件可以实现选项卡的功能,从而提高用户体验。本文将详细介绍如何在 MFC 中使用 Tab 控件实现选项卡,并在子对话框中使用图像控件显示...

    MFC Dialog 添加阴影效果

    在MFC中,Dialog是用于显示交互式信息或获取用户输入的重要组件。通常,Dialog Box是无阴影的,但为了提升用户体验和视觉效果,开发者有时希望为其添加阴影效果。在VC6.0环境下,尽管工具相对老旧,但依然可以通过...

    mfc窗口固定大小

    在MFC(Microsoft Foundation Classes)框架中,创建一个固定大小的窗口是常见的需求,这主要涉及到窗口类的设计和消息处理。MFC是微软提供的一种C++库,用于简化Windows应用程序的开发,它封装了Windows API,使...

    Dialog下创建 MFC OpenGL子窗口

    这里我们将深入探讨如何在Dialog模式下创建一个MFC OpenGL子窗口,而不是使用SDI (Single Document Interface) 或 MDI (Multiple Document Interface)。 首先,我们需要理解MFC中的对话框。对话框是Windows应用程序...

    MFC中在dialog中使用DOC/VIEW框架

    当我们谈论在对话框(Dialog)中使用DOC/VIEW框架时,这意味着我们将这种通常应用于文档/视图结构的技术引入到非模态或模态对话框中。 **1. DOC/VIEW架构概述** DOC/VIEW架构是MFC的核心部分,它遵循了模型-视图-...

    vc mfc实现dialog半透明置顶效果

    在VC++ MFC(Microsoft Foundation Classes)环境中,创建具有半透明和置顶效果的Dialog对话框是一项常见的需求,尤其在设计用户界面时。本篇将详细介绍如何利用MFC实现这一功能,主要涉及Windows API函数的使用,...

    MFCtab控件的使用

    - MFC Tab控件通常与Child Dialog或Child Frame Window关联,通过`Create()`函数创建并添加到Tab中。 - 使用`m_tabCtrl.SetCurSel(index)`切换到指定的选项卡。 - 监听TCN_SELCHANGE消息,当用户切换选项卡时,...

    vc/MFC使用Tab Control控件

    在本文中,我们将详细介绍如何在 VC/MFC 中使用 Tab Control 控件来创建一个带有选项卡的对话框。 首先,我们需要新建一个 MFC 工程,选择 Dialog based,然后删除默认添加的三个控件。接下来,我们添加一个 Tab ...

    MFC中形形色色的dialog扩展类

    在Microsoft Foundation Classes (MFC)库中,对话框(Dialog)是用户界面的重要组成部分,用于实现用户与应用程序的交互。MFC提供了丰富的对话框类,包括标准对话框类(如CDialog)以及一系列的扩展类,以满足各种...

    Dialog关于MFC控件的使用

    本教程将深入探讨如何在MFC中使用基本控件,如按钮和复选框。 一、MFC控件概述 MFC中的控件是Windows窗口中的可视化元素,它们用于与用户进行交互。这些控件包括按钮、文本框、复选框、单选按钮、列表框等。每个...

    MFC中tab控件优化

    在Microsoft Foundation Classes(MFC)中,Tab控件是一种常见的用户界面元素,它允许多个页面或选项卡在一个单一的窗口中切换,以便用户可以在同一区域内浏览不同的内容或执行不同的功能。优化MFC中的Tab控件是提高...

    使用Tab controls window api 函数实现简单界面

    然后,在对话框编辑器中,从工具箱中拖放一个Tab控件到对话框上,并设置其ID,例如IDC_TABCTRL。 为了处理Tab控件的事件,我们需要创建一个消息映射。在头文件(一般为Dlg.h)中,为CTabCtrl添加消息映射条目,例如...

    MFC的Dialog贴图

    你可以使用MFC的`CDataExchange`机制,在`DoDataExchange()`函数中处理控件的位置,以确保它们正确地位于背景图片之上。 6. **考虑性能**:如果你的对话框是动态生成或者需要频繁重绘,要考虑使用位图缓存来提高...

    MFC-Dialog.rar_MFC Dialog_界面 美观

    在提供的压缩文件"**MFC Dialog改变大小后,控件随之改变方法.txt**"中,很可能详细阐述了这两种方法的具体实现步骤,包括如何在对话框类中添加消息处理函数,以及如何编写调整控件布局的代码。通过阅读这份文档,...

    MFC的CDialog中嵌入滚动CDialog

    在MFC(Microsoft Foundation Classes)库中,CDialog类是用来创建对话框的基类,而当我们需要在对话框中添加可滚动的子窗口时,就需要进行一些特殊的处理。本篇文章将详细探讨如何在CDialog中嵌入一个滚动的子...

    MFC中Tab控件的使用方法

    ### MFC中Tab控件的使用方法详解 在MFC框架下,`Tab Control`(标签控件)是一种常见的UI组件,用于实现多页式的界面布局,类似于浏览器的标签页功能,可以方便地切换不同的视图或数据集。本文将详细介绍如何在MFC...

    基于MFC创立的dialog

    在这个项目中,我们关注的是如何利用MFC来创建一个Dialog对话框。Dialog对话框是一种常见的用户界面元素,用于收集用户输入或显示信息。 首先,我们需要了解MFC中的CDialog类。它是MFC框架中用于实现对话框的主要类...

    MFCDialog.zip_MFCDialog

    在本案例中,我们关注的是"MFCDialog",一个简单的对话框程序,这对于MFC初学者来说是一个很好的学习起点。 首先,让我们了解一下什么是对话框。在Windows应用中,对话框通常是一个模态窗口,用于与用户交互,收集...

Global site tag (gtag.js) - Google Analytics