首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++ MFC为CTabCtrl中的每个选项卡附加不同的对话框

C++ MFC是一种基于C++的Microsoft Foundation Classes(MFC)框架,用于开发Windows平台上的图形用户界面(GUI)应用程序。CTabCtrl是MFC框架中的一个控件,用于创建选项卡式的用户界面。

在CTabCtrl中,可以为每个选项卡附加不同的对话框,以实现在不同选项卡之间切换时显示不同的内容。以下是一种实现方式:

  1. 创建一个继承自CDialog的对话框类,例如CDialogA、CDialogB、CDialogC等,分别代表不同的选项卡内容。
  2. 在主对话框类(通常是CDialog派生类)的成员变量中添加CTabCtrl控件的变量,例如m_tabCtrl。
  3. 在OnInitDialog()函数中,通过调用CTabCtrl的Create()函数创建选项卡控件,并添加选项卡标签。
  4. 在OnInitDialog()函数中,创建并显示初始选项卡对应的对话框,可以使用CDialog的Create()函数或DoModal()函数。
  5. 在CTabCtrl的选项卡切换事件中,通过调用ShowWindow()函数显示对应选项卡的对话框,并隐藏其他对话框。

下面是一个示例代码:

代码语言:cpp
复制
// 主对话框类的头文件
class CMyDialog : public CDialog
{
public:
    CMyDialog(CWnd* pParent = nullptr);

protected:
    CTabCtrl m_tabCtrl;
    CDialogA m_dialogA;
    CDialogB m_dialogB;
    CDialogC m_dialogC;

    // ...

    virtual BOOL OnInitDialog();
    afx_msg void OnTabSelChange(NMHDR* pNMHDR, LRESULT* pResult);

    DECLARE_MESSAGE_MAP()
};

// 主对话框类的源文件
BOOL CMyDialog::OnInitDialog()
{
    CDialog::OnInitDialog();

    // 创建并设置选项卡控件
    m_tabCtrl.Create(WS_CHILD | WS_VISIBLE | WS_TABSTOP, CRect(10, 10, 300, 200), this, IDC_TABCTRL);
    m_tabCtrl.InsertItem(0, _T("Tab A"));
    m_tabCtrl.InsertItem(1, _T("Tab B"));
    m_tabCtrl.InsertItem(2, _T("Tab C"));

    // 创建并显示初始选项卡对应的对话框
    m_dialogA.Create(IDD_DIALOG_A, this);
    m_dialogA.ShowWindow(SW_SHOW);

    // ...

    return TRUE;
}

void CMyDialog::OnTabSelChange(NMHDR* pNMHDR, LRESULT* pResult)
{
    // 获取当前选中的选项卡索引
    int tabIndex = m_tabCtrl.GetCurSel();

    // 隐藏所有对话框
    m_dialogA.ShowWindow(SW_HIDE);
    m_dialogB.ShowWindow(SW_HIDE);
    m_dialogC.ShowWindow(SW_HIDE);

    // 根据选项卡索引显示对应的对话框
    switch (tabIndex)
    {
    case 0:
        m_dialogA.ShowWindow(SW_SHOW);
        break;
    case 1:
        m_dialogB.ShowWindow(SW_SHOW);
        break;
    case 2:
        m_dialogC.ShowWindow(SW_SHOW);
        break;
    }

    *pResult = 0;
}

BEGIN_MESSAGE_MAP(CMyDialog, CDialog)
    ON_NOTIFY(TCN_SELCHANGE, IDC_TABCTRL, &CMyDialog::OnTabSelChange)
END_MESSAGE_MAP()

在这个示例中,我们创建了一个包含三个选项卡的CTabCtrl控件,并为每个选项卡分别创建了对应的对话框类。在主对话框类的OnInitDialog()函数中,我们创建并显示了初始选项卡对应的对话框。在选项卡切换事件中,我们根据选项卡索引显示对应的对话框,并隐藏其他对话框。

这种方式可以实现在CTabCtrl中的每个选项卡上显示不同的内容,每个对话框可以包含不同的控件和逻辑。这在需要在不同选项卡之间切换显示不同内容的应用场景中非常有用。

腾讯云相关产品和产品介绍链接地址:

请注意,以上仅为示例,实际选择使用的云计算品牌商应根据具体需求和实际情况进行评估和选择。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 【Visual Studio 2019】创建 MFC 桌面程序 ( 安装 MFC 开发组件 | 创建 MFC 应用 | MFC 应用窗口编辑 | 按钮添加点击事件 | 修改按钮文字 | 打开应用 )

    打开 Visual Studio Installer , 然后选择 修改 Visual Studio 2019 , 弹出如下对话框 , 选择 " 使用 C++ 桌面开发 " , 然后打开右侧 "...使用 C++ 桌面开发 " 选项卡 , 勾选 " " 选中后点击右下方 " 修改 " 按钮 , 等待下载安装完毕 ; 二、创建 MFC 应用 ---- 在 Visual Studio 2019...; 应用程序类型选择 " 基于对话框 " , 基于对话框选项设置 无 ; 其它配置选择默认即可 , 也可以选择其它配置 , 这里直接点击 " 完成 " 按钮 ; 系统自动生成 MFC 程序如下..." 资源视图 " , 点击 " 资源视图 " " Dialog " 下 " IDD_MFC_HELLO_WORLD_DIALOG " , 即可查看对话框 ; 从工具箱拖动一个 Button...OnBnClickedButton1() 方法编辑按钮点击事件 ; 在该方法添加如下代码 , 点击后弹出一个对话框 , 对话框内容是 Unicode 编码格式字符串 “Hello World

    6K41

    MFC拓展库】上海道宁与BCGSOFT合作为您带来专业Micrisoft Windows开发业务组件

    库拥有500多个经过全面设计测试和充分记录MFC扩展类其组件可以轻松地集成到应用程序并节省数百个开发和调试时间一、开发商介绍BCGSoft Ltd.成立于1998年,是一家专门Microsoft...BCGSoft技术已集成到MFC和Visual Studio等Microsoft开发产品广大开发人员节省了节省数百个开发和调试时间。...它不仅仅是一个新控件 - 它是一种新用户界面理念。功能区控件将传统工具栏和菜单替换为选项卡式组(类别)。每个选项卡在逻辑上分为面板,每个面板可能包含各种控件和命令按钮。...自动生成行和列(对于 .NET)导出 HTML 和 RTF单元格边框 - 具有不同线条样式粗细边框(适用于 .NET)浮动文本 - 如果相邻单元格空,则在相邻单元格上绘制文本文本环绕和修剪。...03、支持可折叠节点(大纲)开箱即用大纲解析器可识别 C++ 文件,并且可以通过编程方式或使用外部 XML 文件进行自定义。04、智能感知支持我们 IntelliSense 提供高级支持。

    5.6K20

    VC++编写ActiveX控件

    每个控件都有自己事件、方法和属性。使用了控件编程非常容易。...(“快捷键Ctrl+W”或者“查看”->“建立类向导…”)      在“Automation”选项卡控件添加方法和属性。      在“ActiveX Events”选项卡控件添加事件。...2.1 添加控件属性      切换到“Automation”选项卡,点击右边“Add Property…”会弹出对话框: External name:外部名称。...2.2 添加控件方法      在“Automation”选项卡,点击右边“Add Method…”会弹出对话框: External name:方法外部名称。...2.3 添加控件事件      切换到“ActiveX Events”选项卡,点击右边“Add Event…”会弹出对话框: External name:事件外部名称。

    3.5K30

    WINDOWS核心编程--Windows程序内部运行机制

    : windows程序内部运行机制 学习程序运行机制,学习MFC打下基础。...,根据消息不同,代表不同意思 LPARAM lParam; //用于指定消息附加信息,根据消息不同,代表不同意思 DWORD time;...第二个参数:message 消息类型,该值一个数值,不同数值表示不同消息,为了便于记忆,windows 不同消息定义了不同宏,WM_XXX。...要在 VC++ 开发环境向应用程序传递参数,可以单击菜单 【 Project 】→【 Settings 】,选择“ Debug ” 选项卡,在“ Program arguments ”编辑框输入你想传递给应用程序参数...用是__cdecl调用约定,VS开发环境也是 Win32函数都默认用__stdcall调用 第三个成员变量–cbClsExtra OS系统每个窗口类管理一个WNDCLASS结构 这是类附加内存

    1.5K50

    MFC 调用静态链接 MFC 规则 DLL

    简语: 最近学习了生成静态链接dll及其调用,写一下笔录和大家分享,有错误地方欢迎大家指出来 开发环境 VS2015 开发语言 C++ 开发步骤 以mfcdll创建例,先说明一下win32dll...和mfcdll在支持C上,win32可能比较好,实现过程是一样。...构建MFCDLL项目 新建MFC DLL项目 ? 这边选择带静态链接MFC规则DLL ? 默认生成了,头文件和源文件,右键def文件 ?...新建MFC调用客户端项目 这边是新建对话框项目 ? 在新建项目下,建立一个目录这边是libDll,在改目录下分别建立inc和lib目录 ?...接着配置lib目录,项目属性-->C++ -->常规,配置附加包含目录,这边是配置外来附加头文件目录 ?

    2.5K20

    MFC入门教程(深入浅出MFC)

    2.左侧面板Installed TemplatedVisual C++下选择MFC,中间窗口中选择MFC Application,然后在下面的Name编辑框中键入工程名称,本例取名“Addition...控件属性改变后MFC会相应修改控件关联变量值。这种同步改变是通过MFC对话框类自动生成成员函数DoDataExchange()来实现,这也叫做对话框数据交换和检验机制。...本节教程就到这里了,相信大家对对话框使用更上了一个台阶了,在不同情况下可以选择使用模态对话框和非模态对话框了。鸡啄米欢迎大家留言讨论。...第二个构造函数,参数nIDTemplate是属性页对话框资源ID,参数nIDCaption是属性页对话框选项卡标题所用字符串资源ID,若设为0,则选项卡标题就使用该属性页对话框资源标题。...再总结下,一般属性页对话框和向导对话框创建和显示不同包括,是否需要OnSetActive和OnWizardFinish等重载函数,是否需要调用属性表类SetWizardMode函数设置向导对话框模式

    4.3K30

    VC++DLL应用(含Demo演示)

    VC++,大三时候也试着编写过一个MFC最简单窗口程序。..."<<A; } if (Min) { int B=Min(5,8); cout<<"比较结果"<<B; } FreeLibrary(hDLL);//卸载MyDll.dll文件; } 2.2 用C++...2.3 用C++隐式链接(MFC窗口程序) 新建一个MFC基本对话框窗口程序进行调用: 1. 利用向导建立一个MFC基本对话框 2....这个“*.exe”文件可以是任何平台C++也可以,C也可以,C#也可以,只要这个执行文件调用了dll文件函数即可。...如果想更换调试“*.exe”文件,可以在“工程-》设置”对话框“调试”选项卡进行设置,浏览找到用户需要“*.exe”文件 说明:以VC++环境调用此dll例,运行dllDemo项目,然后会调用

    95520

    初识mfc

    今天主要了解了Visual C++开发环境Visual Studio(话说以前都是用来调试控制台程序)和用mfc写了一个最简单程序。   ...目前微软大力推广开发环境就是vs,它集成度相当高,方便程序员进行开发工作。vs就不说了。来说说如何建立一个最简单mfc程序。...第一步应用程序类型类型选择:基于对话框,然后项目类型选择MFC然后点完成,一个简单对话框程序框架就完成了.现在已经有了一个可运行应用程序框架,接下来要做就是设计程序窗口.为什么说是用mfc程序呢...因为mfc是一系列c++类,他们包含了绝大多数与windows操作系统交互编程功能,就是说别人已经预先写好了,我们自需要拿来用即可.   ...直接在资源视图中打开IDD_HELLO_DIALOG对界面进行修改.鼠标点击每个按钮右下角属性窗口对该按钮进行修改,比如更改大小,位置,增加点击事件等.在左边工具箱可直接拖拽各种控件到窗口中,非常方便

    1.7K30

    基于消息事件驱动机制(Message Based, Event Driven)

    模型在MFC程序应用 MFC(Microsoft Foundation Classes)是微软基础类库,对大部分Windows API进行封装,同时也是桌面软件UI开发框架,下图是一个用VS2019...下文会基于鼠标点击后完整系统响应过程,说明该模型在MFC体现。 ?...2.4.1 Win32应用程序消息处理映射表 WndProc消息处理函数,代码内部通过switch case,给不同消息指定不同处理函数。...消息处理映射表 在如下代码可以看到,WINDOWS消息WM_CREATE,对应消息处理函数OnCreate.当消息到达时,消息泵知道去调用OnCreate函数。.../… 2)Java Netty 3)DotNet DotNetty 4.3.3 Epoll机制说明 1)创建Epoll实例句柄:可以理解管理其他socket领头羊; 2)事件注册:每个SOCKET

    2.6K20

    让vc编译出程序减小体积

    在刚才打开"link"选项卡,在下面的"Project options(工程选项)"添加:/align:512(还可以将512设 置更小如16,32.....).注意两个参数之间有个空格. 3k了...另外,如果要是用到MFC函数程序,可在"Project(工程)--->settings(设置)"里面的"通用(General)"选项卡在"Microsoft Foundation Classes"中选择使用一个...MFCdll(Use MFC in a Share Dll)也会使文件大小缩小很多.现在我们超小后门编译好了,试下能用否. ok 没问题哦 大家注意到程序运行时会产生一个cmd窗口,要让他没有就好了...80486 进行优化 /GR[-] 启用 C++ RTTI /G5 Pentium 进行优化 /GX[-] 启用 C++ EH(与 /EHsc 相同) /G6 PPro、P-II、P-III.../lib: 指定要在其中搜索引用附加目录

    2K10

    深入浅出MFC-读书笔记

    早期这是一个巨大头文件,大约有5000行左右, Visual C++ 4.0 已把它切割各个较小文件,但还以WINDOWS.H 总括之。...把方法封装在结构体其实也有面向对象概念在里面。 对话框运作 Windows 对话框依其与父窗口关系,分为两类: 1....对话框各个控制组件也都是小小窗口,各有自己窗口函数,它们以消息与其管理者(父窗口,也就 是对话框)沟通。...Visual C++ 4.0 编译器本身支持完整C++ exceptions, MFC 也因此有了两个exception 版本:你可以使用语言本身提供性能,也可以沿用MFC 古老方法(以宏形式出现...Scribble 可以激活许多对话框,前一节提了许多。唯一要程序员自己动手(我意思是出现在我们程序代码只有About 对话框。 比之于SDK 程序对话框,这真是方便太多了。

    84020

    VS2010编写动态链接库DLL和单元测试,转让DLL测试正确性

    大家好,又见面了,我是全栈君 本文将创建一个简单动态库-link,谱写控制台应用程序使用该动态链接库,该动态链接库“JAVA调用动态链接库DLL之JNative学习”中使用DLL,仅仅是项目及文件名不同...在出现Win32 应用程序向导概述对话框中点击下一步。 5、在应用程序设置,选择应用程序类型下DLL。 6、勾选附加选项下空项目。 7、单击完毕创建项目。...右键单击simpleDLL项目,加入->新建项,选择C++ 文件(.cpp),设置名称为simpleDLL。单击加入。 3、新类加入内容。...在出现Win32 应用程序向导概述对话框中点击下一步。 5、在应用程序设置。选择应用程序类型下控制台应用程序。 6、单击完毕创建项目。...在右側找到MFC使用,选择在静态库中使用MFC 这里是改动MFC使用。

    1.3K20

    多线程编程10个例子--1

    进程是应用程序执行实例,每个进程是由私有的虚拟地址空间、代码、数据和其它各种系统资源组成 ,进程在运行过程创建资源随着进程终止而被销毁,所使用系统资源在进程终止时被释放或关闭。   ...Win32 SDK函数支持进行多线程程序设计,并提供了操作系统原理各种同步、互斥和临界区等操作。Visual C++ 6.0,使用MFC类库也实现了多线程程序设计,使得多线程编程更加方便。...dwCreationFlags:控制线程创建附加标志,可以取两种值。...六、MFC多线程编程实例   在Visual C++ 6.0编程环境,我们既可以编写C风格32位Win32应用程序,也可以利用MFC类库编写C++风格应用程序,二者各有其优缺点。...由于使用类库所带来快速、简捷和功能强大等优越性,因此 除非有特殊需要,否则Visual C++推荐使用MFC类库进行程序开发。 我们知道,MFC线程分为两种:用户界面线程和工作者线程。

    2.5K50

    windows窗体线程异常_指针在声明和使用时有何不同

    大家好,又见面了,我是你们朋友全栈君。 在多线程设计,许多人为了省事,会将对话框类或其它类指针传给工作线程,而在工作线程调用该类成员函数或成员变量等等。...其实本人以为,说穿了,很简单,避免多线程冲突,下面举例说明: 在你对话框类中有一编辑框和一按钮,编辑框关联了变量m_strText 现在在你按下按钮时,你有代码如下: m_strText...所以,MFC并不建议这种多线程传递MFC对象指针,而且MFC人为加了一个ASSERT_VALID来表示它们不建议。...正因为如此,MFC只是在Debug版本才有这个ASSERT_VALID问题存在,在Release版本却没有,因为它没有理由来阻止我们用。...CWnd::AssertValid拷贝来,然后注释掉检测线程MFC对象和Windows对象映射代码。

    51240

    任务管理器编码详解

    首先创建一个MFC应用程序, 在主对话框添加一个TabContrl标签控件用于放置应用程序、进程和CPU信息三个页面, 子对话框显示与切换,是通过标签控件完成。...当用户点击标签控件上每一项时,分别显示对应页面的相关信息。 要显示三个子对话框,需要添加三个对话框到工程,并将Style属性设为Child,Board设为None,取消标题栏。...; //图表 接下来就创建子窗口: m_Tab.InsertItem(0, _T("应用程序"), 60);//向tab控件添加每个参数选项卡值 m_Tab.InsertItem(1, _T("进程信息...(IDD_PROCESS, &m_Tab); m_Chart.Create(IDD_CHART, &m_Tab); 当用户选择标签一项是,为了将对应对话框在标签控件显示出来,需要在OnShowWindow...这样便可将在个对话框分别显示于标签控件每个页面,但要实现选择标签不同项显示不同页面还需在OnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult)添加显示代码

    2K110

    EVC34项目升级到Visual Studio项目的一些建议

    注意是要在头文件和.cpp文件中都进行修改,使得其一致。同时,在函数体,进行return相应值。因为需要返回LRESULT值。 3....解决方法:在工程属性—〉General—〉Project Defaults –〉Use MFC ,把Use MFC in a shared DLL 改为 Use MFC in a static DLL...以我例,这个异常出现在winmain.cpp, ?     原因是InitInstance()返回不成功,于是我再进入InitInstance函数查看。...后来在msdn英文论坛上找到了一些蛛丝马迹,还是在项目的资源文件上出了问题,默认情况下,Embedded Visual C++ 4.0 版会将 MFC Pocket PC 应用程序对话框样式设置 DS_MODALFRAME...另外,MSDN文档和前辈一些文章给了我很好参考,在此给出链接,希望对大家有用。 1. eMbedded Visual C++ 到 Visual Studio 2005 升级向导 2.

    1.1K100
    领券