MFC tabcontrol切换界面

article/2025/10/10 0:17:36

1.添加控件tabcontrol。

2.切换到资源界面->Dialog->插入Dialog,创建两个Dialog界面。

3.为新建的两个Dialog添加类,在新建的Dialog界面右键类向导添加对应的类。

4.添加TabSheet.cpp 和TabSheet.h 这两个文件从网上下载即可,具体源码如下:

TabSheet.cpp:

// TabSheet.cpp : implementation file  
#include "stdafx.h"  
#include "TabSheet.h"  
#ifdef _DEBUG  
#define new DEBUG_NEW  
#undef THIS_FILE  
static char THIS_FILE[] = __FILE__;  
#endif  
/  
// CTabSheet  
CTabSheet::CTabSheet()  
{  m_nNumOfPages = 0;  m_nCurrentPage = 0;  
}  CTabSheet::~CTabSheet()  
{  
}  BEGIN_MESSAGE_MAP(CTabSheet, CTabCtrl)  //{{AFX_MSG_MAP(CTabSheet)  ON_WM_LBUTTONDOWN()  //}}AFX_MSG_MAP  
END_MESSAGE_MAP()  /  
// CTabSheet message handlers  BOOL CTabSheet::AddPage(LPCTSTR title, CDialog *pDialog,UINT ID)  
{  if( MAXPAGE == m_nNumOfPages )  return FALSE;  m_nNumOfPages++;  m_pPages[m_nNumOfPages-1] = pDialog;  m_IDD[m_nNumOfPages-1] = ID;  m_Title[m_nNumOfPages-1] = title;  return TRUE;  
}  void CTabSheet::SetRect()  
{  CRect tabRect, itemRect;  int nX, nY, nXc, nYc;  GetClientRect(&tabRect);  GetItemRect(0, &itemRect);  nX=itemRect.left;  nY=itemRect.bottom+1;  nXc=tabRect.right-itemRect.left-2;  nYc=tabRect.bottom-nY-2;  m_pPages[0]->SetWindowPos(&wndTop, nX, nY, nXc, nYc, SWP_SHOWWINDOW);  for( int nCount=1; nCount < m_nNumOfPages; nCount++ )  m_pPages[nCount]->SetWindowPos(&wndTop, nX, nY, nXc, nYc, SWP_HIDEWINDOW);  }  void CTabSheet::Show()  
{  for( int i=0; i < m_nNumOfPages; i++ )  {  m_pPages[i]->Create( m_IDD[i], this );  InsertItem( i, m_Title[i] );  }  m_pPages[0]->ShowWindow(SW_SHOW);  for( int i=1; i < m_nNumOfPages; i++)  m_pPages[i]->ShowWindow(SW_HIDE);  SetRect();  }  void CTabSheet::OnLButtonDown(UINT nFlags, CPoint point)   
{  CTabCtrl::OnLButtonDown(nFlags, point);  if(m_nCurrentPage != GetCurFocus())  {  m_pPages[m_nCurrentPage]->ShowWindow(SW_HIDE);  m_nCurrentPage=GetCurFocus();  m_pPages[m_nCurrentPage]->ShowWindow(SW_SHOW);  //      m_pPages[m_nCurrentPage]->SetFocus();  }  
}  int CTabSheet::SetCurSel(int nItem)  
{  if( nItem < 0 || nItem >= m_nNumOfPages)  return -1;  int ret = m_nCurrentPage;  if(m_nCurrentPage != nItem )  {  m_pPages[m_nCurrentPage]->ShowWindow(SW_HIDE);  m_nCurrentPage = nItem;  m_pPages[m_nCurrentPage]->ShowWindow(SW_SHOW);  //      m_pPages[m_nCurrentPage]->SetFocus();  CTabCtrl::SetCurSel(nItem);  }  return ret;  
}  int CTabSheet::GetCurSel()  
{  return CTabCtrl::GetCurSel();  
} //释放page资源
void CTabSheet::Free()
{CTabCtrl::DeleteAllItems();for( int i=0; i < m_nNumOfPages; i++ )  {  m_pPages[i]->DestroyWindow();m_IDD[i] = NULL;m_Title[i] = NULL;}  m_nCurrentPage = 0;m_nNumOfPages = 0;//CTabCtrl::DestroyWindow();  //注意不要将this指针释放了
}

TabSheet.h

#if !defined(AFX_TABSHEET_H__42EE262D_D15F_46D5_8F26_28FD049E99F4__INCLUDED_)  
#define AFX_TABSHEET_H__42EE262D_D15F_46D5_8F26_28FD049E99F4__INCLUDED_  #if _MSC_VER > 1000  
#pragma once  
#endif // _MSC_VER > 1000  
// TabSheet.h : header file  
//  /  
// CTabSheet window  
#define MAXPAGE 16  class CTabSheet : public CTabCtrl  
{  // Construction  
public:  CTabSheet();  // Attributes  
public:  // Operations  
public:  // Overrides  // ClassWizard generated virtual function overrides  //{{AFX_VIRTUAL(CTabSheet)  //}}AFX_VIRTUAL  // Implementation  
public:  int GetCurSel();  int SetCurSel(int nItem);  void Show();  void Free();void SetRect();  BOOL AddPage(LPCTSTR title, CDialog *pDialog, UINT ID);  virtual ~CTabSheet();  // Generated message map functions  
protected:  LPCTSTR m_Title[MAXPAGE];  UINT m_IDD[MAXPAGE];  CDialog* m_pPages[MAXPAGE];  int m_nNumOfPages;  int m_nCurrentPage;  //{{AFX_MSG(CTabSheet)  afx_msg void OnLButtonDown(UINT nFlags, CPoint point);  //}}AFX_MSG  DECLARE_MESSAGE_MAP()  
};  /  //{{AFX_INSERT_LOCATION}}  
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.  #endif // !defined(AFX_TABSHEET_H__42EE262D_D15F_46D5_8F26_28FD049E99F4__INCLUDED_)  

5.将TabSheet.cpp和TabSheet.h添加到工程中。

6.为tabcontrol添加变量,这里一定要以CTabSheet类型,不是选择类型,是直接写CTabSheet。

7.使用m_tab变量来关联Dialog1和Dialog2,关联之前需要在主文件对应的头文件中(我用FBG来创建的项目,这里就是FBGDlog.h)引入Dialog1和Dialog2头文件,然后用CDialog1和CDialog2类来定义变量。

8.在主文件中(我用FBG来创建的项目,这里就是FBGDlog.C)添加初始化代码如下:

AddPage函数就是用来添加页的,对一个的三个参数:第一个是标题,第二个是选择的Dialog,第三个是Dialog的ID。Show函数当然是用来显示的。

9.好了,编译运行看一下哈……….这么奇怪,是可以切换,但是怎么直接弹出来了,而且不在框内。

10.修改Dialog1和Dialog2的外观属性,Border改为 Node 无边框,Style改为 Child 这样就不会跑不到外面了。

11.运行一下,哈哈,真听话。

 

 

 


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

相关文章

TabControl控件

点餐用到的控件&#xff1a; 1&#xff09;TabControl: 管理并向用户显示可以包含控件和组件的相关选项卡的信息 2&#xff09;ComboBox: 显示一个可编辑的文本框&#xff0c;其中包含一个允许值下拉列表 3&#xff09;DateTimePicker: 允许用户设定日期和时间&#x…

WPF 控件专题 TabControl控件详解

1、TabControl 介绍 TabControl 表示包含多个项的控件&#xff0c;这些项共享屏幕上的同一空间&#xff0c;每个区域都可以通过单击通常位于控件顶部的选项卡标题来访问。 也叫选项卡控件。 *******************************************************************************…

WPF 基础控件之 TabControl样式

其他基础控件 1.Window2.Button3.CheckBox4.ComboBox5.DataGrid 6.DatePicker7.Expander8.GroupBox9.ListBox10.ListView11.Menu12.PasswordBox13.TextBox14.RadioButton15.ToggleButton16.Slider 17.TreeView TabControl 实现下面的效果 1&#xff09;TabControl来实现动画&…

WPF TabControl美化

实现效果 XMAL样式 <Window.Resources><!-- TabItem的样式 --><Style TargetType"{x:Type TabItem}"><Setter Property"Template"><Setter.Value><ControlTemplate TargetType"{x:Type TabItem}"><Gr…

WPF动态加载TabControl

主要讲一下如何通过点击菜单&#xff0c;实现动态加载TabControl的功能&#xff0c;准确来说应该是动态加载TabItem,要实现这个功能&#xff0c;我们需要解决两个问题&#xff1a; 点击菜单的时候&#xff0c;需要传进来一个你要加载的UserControl控件的名称&#xff0c;让程序…

C# TabControl

C# TabControl 你好&#xff01; 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章&#xff0c;了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持&#xff0c;除了标…

TabControl

jquery主体&#xff1a; var TabControl function (ops) {this._ops {items: ops.items || [],hashItems: {},selectedIndex: ops.selectedIndex || 0};this._element $(ops.element);this._tabContainerId "ui-tabcontrol-container-";this._convertHashItems()…

WinForm TabControl美化

一、简述 TabControl控件是winform里非常常用的一个控件&#xff0c;但是默认的tab控件的标签页和文字颜色都是无法修改的。有时候我们会要用到竖排列的标签页&#xff0c;或者想要更改标签页的背景颜色和字体时&#xff0c;自带的TabControl就满足不了我们的需求了&#xff0…

MFC中选项卡TabControl控件的用法

前言&#xff1a;我这里的开发环境是VS2010&#xff0c;其它不同的开发环境可能会有所差别&#xff0c;但绝不会差太多&#xff0c;其根本方法一般是不会变的。 选项卡控件(英文名&#xff1a;TabControl),这个控件使用在开发一些比较复杂&#xff0c;和用户交互性比较多的软件…

C#中TabControl相关用法

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

【Wayland】Weston启动流程分析

Weston启动流程分析 Weston是Wayland Compositor的实现。其Server端作为独立的进程运行在系统中。MakeFile中编译成果为&#xff0c;“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&#xff0c;是两个相辅相成的概念。这里简单总结一下&#xff1a; wayland是一套为“显示”服务的协议&#xff0c;基于C/S结构。它定制了一套标准的接口、基本通信方式。wayland…

display:weston:weston-simple-egl

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

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

编译前期准备&#xff1a; 1、更换国内源&#xff1a; #添加阿里源 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 非常详尽&#xff0c;多图慎入&#xff1a;Wayland与Weston简介 - 云社区 - 腾讯云 什么是weston&#xff1f; Wayland是一套display server(Wayland compositor)与…

waylandweston

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

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 协议进行过多的阐述. 考虑到读者可能存在不同的需求,采用分层次的描述方式,主要面向以下两类人群…