MFC中选项卡TabControl控件的用法

article/2025/10/10 23:50:16

前言:我这里的开发环境是VS2010,其它不同的开发环境可能会有所差别,但绝不会差太多,其根本方法一般是不会变的。

选项卡控件(英文名:TabControl),这个控件使用在开发一些比较复杂,和用户交互性比较多的软件上面,(比如:游戏辅助)。要设置的东西太多,一个界面肯定是不够的,也不方便管理。

具体实现步骤如下:
        1. 先创建一个基本的对话框程序,再将TabControl控件拖入到其中,调整好大小。如下
图(图1):

 

然后再为控件添加一个类别为Control的变量(这里关联的变量名为m_TabCtrlMain)。如下图(图2):

 

 

编译后运行看看效果,此时的选项卡是一个空白的页面。如下图(图3):

        2. 打开对话框cpp文件,在初始化函数里为选项卡控件添加选项(这里以添加"打怪"和"
保护"为例)具体操作如下图(图4):


现在再编译运行,这时选项卡控件界面里已经有了选项("打怪"和"保护"),效果如下图(图5):

 

 

        3. 接下来我们为"打怪"和"保护"选项关联对应的界面窗口。
操作方法:在资源管理器里右键单击项目,为项目添加两个窗口资源,为了方便区分我们把其中一个窗口ID名改为IDD_DaGuai,另一个窗口ID名改为IDD_BaoHu。如下图(图6,图7):


这两个窗口最终是要显示在选项卡里的,所以边框是不能要的,在属性-外观-border设置为None。
如下图(图8):

 

        4.接着再为这两个窗口添加类(对应的类名为CPageBaoHu和CPageDaGuai),如下图(图9):

 

          添加类后会自动的生成相应的头文件和源文件,然后在对话框头文件开头包含这两个
头文件。如下图(图10):

 

        5.在对话框头文件里添加这两个类的成员变量,如下图(图11):


然后在cpp文件的初始化函数里写创建窗口的代码,代码如下:

m_PageBaoHu.Create(CPageBaoHu::IDD);
m_PageDaGuai.Create(CPageDaGuai::IDD);

        6.我们还要为选项卡控件写个点击事件处理程序,使之点击选项卡后显示相对应的窗口
,代码如下:
    

void CTabControlDlg::OnTcnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult)
{// TODO: 在此添加控件通知处理程序代码switch(m_TabCtrlMain.GetCurSel()){case 0:m_PageBaoHu.ShowWindow(SW_SHOW);m_PageDaGuai.ShowWindow(SW_HIDE);break;case 1:m_PageDaGuai.ShowWindow(SW_SHOW);m_PageBaoHu.ShowWindow(SW_HIDE);break;}*pResult = 0;
}


          为了在显示时区分两个窗口,我们还要在两个窗口上做个记号(就在窗口的上下位置添
加个静态文本吧)。然后编译运行程序,如下图(图12):
        
        7.从图12中看,我们发现了个问题:显示的窗口在选项卡外面,这根本不是我们想要的效果,要解决这个问题,我们要为创建的窗口指定一个父窗口,代码如下:

m_PageBaoHu.SetParent(&m_TabCtrlMain);
m_PageDaGuai.SetParent(&m_TabCtrlMain);


 编译后运行效果如下图(图13):

 

          现在窗口虽然显示在选项卡内,但是边缘衔接有缝隙。要解决这个问题,我们就要
          获得父窗口的窗口区域大小,完整的代码如下:
        

    // TODO: 在此添加额外的初始化代码RECT tabRect;m_TabCtrlMain.GetClientRect(&tabRect);//获得选项卡区域大小的坐标(上下左右)tabRect.top+=26;//对坐标做一些微调,这26是选项卡按钮的高度tabRect.left+=2;//这是边框的宽度m_TabCtrlMain.InsertItem(0,_T("打怪"));m_TabCtrlMain.InsertItem(0,_T("保护"));m_PageBaoHu.Create(CPageBaoHu::IDD);//创建窗口m_PageDaGuai.Create(CPageDaGuai::IDD);m_PageBaoHu.SetParent(&m_TabCtrlMain);//为创建的窗口设置一个父窗口m_PageDaGuai.SetParent(&m_TabCtrlMain);m_PageBaoHu.MoveWindow(&tabRect);//把窗口移动到指定的区域里m_PageDaGuai.MoveWindow(&tabRect);

    编译后运行效果如下图(图14):

 

    OK,完美解决。


http://chatgpt.dhexx.cn/article/hJCnK3Gw.shtml

相关文章

C#中TabControl相关用法

最近在用C#做项目时,用到TabControl这个控件,将学到的东西做个总结: 一、拖一个TabControl控件到窗口上,在控件上点击右键,可以添加选项卡/删除选项卡;或者在属性中找到TabPages,点击进去,可以看…

【Wayland】Weston启动流程分析

Weston启动流程分析 Weston是Wayland Compositor的实现。其Server端作为独立的进程运行在系统中。MakeFile中编译成果为,“weston”的可执行程序MakeFile.am(weston 2.0.0) bin_PROGRAMS westonweston_LDFLAGS -export-dynamic weston_CPPFLAGS $(AM_CPPFLAGS)…

Weston 纹理倒置(render-gl)

纹理倒置 背景 在 render-gl 接入 frame buffer object 实现 off-screen 渲染后,发现得到的渲染图发生了180的倒置. 查阅了有关资料后,在 eglspec.1.5 中的 2.2.2.1 Native Surface Coordinate Systems 找到了答案: The coordinate system for native windows and pixmaps …

【Wayland】Wayland简介与定制指导

Wayland与Weston简介 由于某些原因。移植并定制一套基于Wayland的Compositor。Wayland与Weston,是两个相辅相成的概念。这里简单总结一下: wayland是一套为“显示”服务的协议,基于C/S结构。它定制了一套标准的接口、基本通信方式。wayland…

display:weston:weston-simple-egl

写在前面: 客户端渲染 在Wayland架构中,客户端UI的所有呈现均由客户端代码执行,通常由客户端使用的图形工具包执行。 图形工具箱可以使用其希望呈现UI元素的任何方法:在CPU上进行软件呈现,使用GLES进行硬件呈现。 W…

Ubuntu 20.04 X86成功编译运行wayland、wayland-protocols、weston,亲测有效,踩了很多坑,完美解决。

编译前期准备: 1、更换国内源: #添加阿里源 deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse deb http://mirrors.aliyun.c…

weston 窗口管理 (1)

窗口管理 (1) 一、概述 在传统嵌入式场景下,通常只会运行一个UI程序,故相当于单窗口程序,无需桌面服务器的介入;在桌面系统下,对于每一个UI程序而言,它们的行为相比于嵌入式场景仍然没有发生改变,其对接的仍然是窗口,只不过在同一个时刻允许多个UI程序同时运行. 无论如何对于…

weston 简介

参考???weston wiki Weston - Gentoo Wiki weston (1): Linux man pages – code.tools Weston-1.12.0 非常详尽,多图慎入:Wayland与Weston简介 - 云社区 - 腾讯云 什么是weston? Wayland是一套display server(Wayland compositor)与…

waylandweston

简单地说,Wayland是一套display server(Wayland compositor)与client间的通信协议,而Weston是Wayland compositor的参考实现。其官网为http://wayland.freedesktop.org/。它们定位于在Linux上替换X图形系统。X图形系统经历了30年左右的发展,其…

weston 1: 编译与运行傻瓜教程

本人Kubuntu版本是22.04 sudo apt-get update sudo apt-get upgrade 进入主目录 cd $HOME/ mkdir install mkdir works vim ~/.bashrc export WLD$HOME/install source ~/.bashrc cd works wayland git clone https://gitlab.freedesktop.org/wayland/wayland.git cd …

weston input 概述

weston input 概述 零、前言 本文描述了有关于 weston (基于 wayland 协议一种显示服务器的实现) 中有关于输入设备管理的部分;为了聚焦于此,本文不会对 weston 整体或 wayland 协议进行过多的阐述. 考虑到读者可能存在不同的需求,采用分层次的描述方式,主要面向以下两类人群…

weston 2: 登录后直接启动weston配置

本人Kubuntu版本是22.04 名词:SDDM(SDDM - Arch Linux 中文维基)显示管理器 配置流程如下: 1.修改配置文件 a.配置.bashrc vim ~/.bashrc //以下内容删除 #export WLD$HOME/install #export LD_LIBRARY_PATH$WLD/lib/x86_64-…

Weston介绍

Weston结构说明 Weston源码结构 clients:wayland显示客户端应用 compositor:合成器进程(服务端),窗体风 格样式处理 libweston:合成器以及客户端渲染处理以及驱动实现方式,以及wayland服务与客户…

Wayland/Weston 启动方式简介

前言 本文简单介绍 Weston 常用的几种 backend 启动方式。目前最新的 Weston 8.0.0 支持如下几种 backend: drm-backendfbdev-backendheadless-backendrdp-backendwayland-backendx11-backend 其中 headless-backend 不带任何 UI 界面,主要用于 westo…

weston设置

weston设置 屏幕旋转180度方法修改标题栏位置启动配置文件 屏幕旋转180度方法 编辑 /etc/xdg/weston/weston.ini文件,增加如下语句 [output] nameDSI-1 transform180其中name为你的显示屏名称,可以通过如下命令来查看显示屏名称: card0-DS…

Weston 窗口管理(2)

窗口管理(2) 本文基于 weston 分支 10.0.2 进行描述. 五、概述 本文为窗口管理(1)的续章,更多站在开发者角度,以 weston 的代码实现讲解窗口管理(1)中所实现的部分业务场景. 六、数据结构 在窗口管理(1)中曾经描述过 weston 具体的分层逻辑,如下: 再进一步可以把 WESTON_LAY…

01-weston 简介

参考​​​​​​weston wiki Weston - Gentoo Wiki weston (1): Linux man pages – code.tools Weston-1.12.0 非常详尽,多图慎入:Wayland与Weston简介 - 云社区 - 腾讯云 什么是weston? Wayland是一套display server(Wayland compos…

disunity的使用

1. 下载并安装好jdk: 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 安装教程:http://jingyan.baidu.com/article/6dad5075d1dc40a123e36ea3.html 2.下载disunity: https://…

T-digest

目录 算法算法原理空间消耗及错误界限 示例T-digest的建立T-digest的查询 相关链接 上一篇博客中讲述了使用 R a n d o m Random Random算法进行 q u a n t i l e quantile quantile估算,详情可见Random,本博客将讲诉另外一个 q u a n t i l e quantile …