分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

系统环境:Windows 7
软件环境:Visual Studio 2008 SP1
本次目的:在模态或非模态对话框中使用Tab Control控件,及引申在单/多文档中使用

查阅MSDN文档,对于创建Tab Control控件,MSDN上说明如下:

To use CTabCtrl directly in a dialog box

1.     In the dialog editor, add a Tab Control to your dialog template resource. Specify its control ID.

2.     Use the Add Member Variable Wizard to add a member variable of type CTabCtrl with the Control property. You can use this member to call CTabCtrl member functions.

3.     Map handler functions in the dialog class for any tab control notification messages you need to handle. For more information, see Mapping Messages to Functions.

4.     In OnInitDialog, set the styles for the CTabCtrl.

To use CTabCtrl in a nondialog window

1.     Define the control in the view or window class.

2.     Call the control's Create member function, possibly in OnInitialUpdate, possibly as early as the parent window's OnCreate handler function (if you're subclassing the control). Set the styles for the control.

对于直接使用CTabCtrl在对话框内

1.         在对话框编辑区内,添加一个Tab Control控件到资源模板里面,设置它的控制ID

2.         使用添加成员变量向导,为控件添加一个CTabCtrl类型的成员变量,你可以使用这个变量调用CTabCtrl的成员函数

3.         对话框类的映射处理功能可以处理任何你需要处理的标签控件消息。有关更多信息,请参阅消息映射函数。

4.         在OnInitDialog()函数里面,设置CTabCtrl的风格。

对于在非对话框窗口使用CTabCtrl

1.         定义在视图或窗口类的控件。

2.         调用控件的创建成员函数,可能在OnInitialUpdate中,可能在父窗口的OnCreate处理函数早期(如果你是子类的控件)。设置控件的风格。

下面介绍在对话框中添加Tab Control控件,工程不一定是要MFC基于对话框形式,单文档视图类派生自CFormView的工程也行,或是任何工程弹出的对话框(如登录界面等等)都行(个人没有都去实验,但理论上应该可以,看了下面就知道。)

1.       首先在对话框资源上添加一个Tab Control控件ID为IDC_LOGIN_TAB,根据需要修改其属性,然后为其添加成员变量m_tab,类型为CTabCtrl

2.       需要几个选项卡,则在对话框资源添加几个对话框,在这里我添加两个选项卡,则要添加两个对话框,其ID分别为IDD_TAB1_DIALOG,IDD_TAB2_DIALOG它们的属性style为Child, Border为None,其他的再根据自己调整。然后分别为其添加对应的基于CDialog类CLoginTab1 ,CLoginTab2

3.       在主对话框添加子对话框头文件,然后再添加三个成员变量,为子对话框添加实例。在OnInitDialog()函数初始化Tab Control控件显示,若对话框没有OnInitDialog()函数,则重载这个函数,具体如下:

[cpp] view plaincopyprint?
  1. //主对话框头文件
  2. class LoginUser : public CDialog
  3. {•••
  4. protected:
  5. virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持
  6. virtual BOOL OnInitDialog();            //没有这个,则在这里重载
  7. DECLARE_MESSAGE_MAP()
  8. public:
  9. CTabCtrl m_tab;
  10. CLoginTab1 m_login_tab1;
  11. CLoginTab2 m_login_tab2;
  12. •••
  13. }

//主对话框头文件class LoginUser : public CDialog{•••protected: virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持 virtual BOOL OnInitDialog();   //没有这个,则在这里重载 DECLARE_MESSAGE_MAP()public: CTabCtrl m_tab; CLoginTab1 m_login_tab1; CLoginTab2 m_login_tab2;•••}

[cpp] view plaincopyprint?
  1. //主对话框实现文件
  2. BOOL LoginUser::OnInitDialog()
  3. {
  4. CDialog::OnInitDialog();
  5. m_tab.InsertItem(0,_T("系统登录"));
  6. m_tab.InsertItem(1,_T("服务器设置"));
  7. m_login_tab1.Create(IDD_TAB1_DIALOG,GetDlgItem(IDC_LOGIN_TAB));
  8. m_login_tab2.Create(IDD_TAB2_DIALOG,GetDlgItem(IDC_LOGIN_TAB));
  9. //获得IDC_TABTEST客户区大小
  10. CRect rs;
  11. m_tab.GetClientRect(&rs);
  12. //调整子对话框在父窗口中的位置,根据实际修改
  13. rs.top+=25;
  14. rs.bottom-=60;
  15. rs.left+=1;
  16. rs.right-=10;
  17. //设置子对话框尺寸并移动到指定位置
  18. m_login_tab1.MoveWindow(&rs);
  19. m_login_tab2.MoveWindow(&rs);
  20. //分别设置隐藏和显示
  21. m_login_tab1.ShowWindow(true);
  22. m_login_tab2.ShowWindow(false);
  23. //设置默认的选项卡
  24. m_tab.SetCurSel(0);
  25. return TRUE;
  26. }

//主对话框实现文件BOOL LoginUser::OnInitDialog(){ CDialog::OnInitDialog(); m_tab.InsertItem(0,_T("系统登录")); m_tab.InsertItem(1,_T("服务器设置")); m_login_tab1.Create(IDD_TAB1_DIALOG,GetDlgItem(IDC_LOGIN_TAB)); m_login_tab2.Create(IDD_TAB2_DIALOG,GetDlgItem(IDC_LOGIN_TAB)); //获得IDC_TABTEST客户区大小CRect rs;m_tab.GetClientRect(&rs);//调整子对话框在父窗口中的位置,根据实际修改rs.top+=25;rs.bottom-=60;rs.left+=1;rs.right-=10;    //设置子对话框尺寸并移动到指定位置m_login_tab1.MoveWindow(&rs);m_login_tab2.MoveWindow(&rs);//分别设置隐藏和显示m_login_tab1.ShowWindow(true);m_login_tab2.ShowWindow(false);    //设置默认的选项卡m_tab.SetCurSel(0);return TRUE;}

4.       响应选项卡切换事件消息,右键Tab Control控件,添加事件处理程序,选择TCN_SELCHANGE事件,在弹出的编辑区域,填入以下代码:

[cpp] view plaincopyprint?
  1. void LoginUser::OnTcnSelchangeLoginTab(NMHDR *pNMHDR, LRESULT *pResult)
  2. {
  3. // TODO: 在此添加控件通知处理程序代码
  4. int CurSel = m_tab.GetCurSel();
  5. switch(CurSel)
  6. {
  7. case 0:
  8. m_login_tab1.ShowWindow(true);
  9. m_login_tab2.ShowWindow(false);
  10. break;
  11. case 1:
  12. m_login_tab1.ShowWindow(false);
  13. m_login_tab2.ShowWindow(true);
  14. break;
  15. default: ;
  16. }
  17. *pResult = 0;
  18. }

void LoginUser::OnTcnSelchangeLoginTab(NMHDR *pNMHDR, LRESULT *pResult){ // TODO: 在此添加控件通知处理程序代码 int CurSel = m_tab.GetCurSel(); switch(CurSel) { case 0:  m_login_tab1.ShowWindow(true);  m_login_tab2.ShowWindow(false);  break; case 1:  m_login_tab1.ShowWindow(false);  m_login_tab2.ShowWindow(true);  break; default: ; } *pResult = 0;}

5.   编译运行。

接下来,来看看非模态对话框的实现,因为Tab Control控件要在对话框的OnInitDialog()函数初始化,而MSDN上说:

After the dialog box and all of its controls are created but just before the dialog box (of either type) appears on the screen, the dialog object's OnInitDialog member function is called. For a modal dialog box, this occurs during the DoModal call. For a modeless dialog box, OnInitDialog is called when Create is called. You typically override OnInitDialog to initialize the dialog box's controls, such as setting the initial text of an edit box. You must call the OnInitDialog member function of the base class, CDialog, from your OnInitDialog override.

非模态对话框是在Create的时候一起调用初始化函数的,OnInitDialog()我们仍可以重载这个函数,来实现以上功能。对于单文档/多文档可以看前面的MSDN说明,这里不再详细写。本文若有错误,请指出。

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

在VC++中使用Tab Control控件相关推荐

  1. MFC中使用TAB Control控件

    2019独角兽企业重金招聘Python工程师标准>>> MFC中使用TAB Control控件 MFC中使用TAB Control控件(转) 假如我现在有个SDI程序,View是Fo ...

  2. VC++ Tab Control控件的基本用法

    VC++ Tab Control控件的基本用法 该程序过程很简单,但是却说明了Tab Control控件的基本用法. 1. 新建一个MFC工程, 取名MyTab, 选择Dialog based, 然后 ...

  3. VC++ Tab Control控件的使用

    1. 新建一个MFC工程, 取名MyTab, 选择Dialog based, 然后Finish. 2. 删除对话框上默认添加的三个控件. 添加Tab Control控件并在Property属性中设置I ...

  4. 在VC中如何使用OCX控件 【来源:http://blog.csdn.net/wulang1114/article/details/4806089】

    首先感谢网络中的各位高手,我的文章只是对你们文章的Copy和学习. 工作中客户提供了一个ocx控件,学习了如何使用它.发现网上没用针对像我一样菜鸟的文章,所以我总结一下我的学习成果供菜鸟学习使用. 1 ...

  5. Tab Control控件的详细使用

    1. 新建一个MFC工程, 取名MyTab, 选择Dialog based, 然后Finish. 2. 删除对话框上默认添加的三个控件. 添加Tab Control控件并在Property属性中设置I ...

  6. MFC 对话框中的picture control 控件显示图片

    MFC读取图片一般使用自定义的DIB文件.DIB文件集中了处理图片的API函数,这样可以方便我们的图像操作. DIB文件下载路径:DIB文件下载 MFC显示图片有几种方法: 1.在运行界面上选择 文件 ...

  7. MFC中Tab Control控件的使用

    一.创建TabControl控件主要分为以下步骤 1.1将TabControl控件拖入基本对话框中,并且创建一个控件变量m_tab 1.2创建两个子对话框,ID分别改为IDD_DIALOG_PAGE1 ...

  8. 怎样给Tab Control控件加上背景颜色或图片

    如果不懂Tab控件添加选项卡(属性页)的请看这篇文章:http://blog.csdn.net/qq_18297675/article/details/50991413 这里我就直接在添加好选项卡的基 ...

  9. 也许有用(也谈VC中ModifyStyleModifyStyleEx无法改变控件的Style)

     一个View中用到了一个CListCtrl,在OnInitialUpdate函数里面他调用了m_listCtrl.ModifyStyleEx(0, LVS_EX_FULLROWSELECT);但是结 ...

最新文章

  1. 报错内容 IndentationError: unindent does not match any outer indentation level
  2. 十一周二次课(6月1日)
  3. mysql 插入加锁_MySQL 是怎么死锁的?
  4. Spring mvc 内置编码过滤器原理解析
  5. 第9章:Bootstrap Token方式增加Node
  6. ElasticSearch搜索语法进阶学习(搜索+聚合,过滤+聚合)
  7. word List25
  8. [XSY] 智慧树(线性同余方程组,线段树/树状数组)
  9. LeetCode 1304. 和为零的N个唯一整数
  10. 开源XDesigner ORM 框架设计
  11. HP-lefthand底层结构具体解释及存储灾难数据恢复
  12. java计算机毕业设计ssm高校会议预约系统
  13. linux 复制文件并改名,在Linux上复制和重命名文件
  14. ireasoning mib browser license expired
  15. 【vue】To install them, you can run: npm install --save aws-sdk module
  16. 数据库delete语句菜鸟_MySQL视图
  17. 二分搜索几种写法分析
  18. 青木的书籍,--股票
  19. 《机器学习实战》支持向量机(手稿+代码)
  20. 我愿意做一辈子的程序员

热门文章

  1. MinIO多租户(Multi-tenant)部署指南
  2. 使用Linux curl命令获取本机公网IP地址
  3. Centos7内核版安装nginx环境问题及解决方法
  4. 浏览器 UC 自动添加关键字 去掉关键字
  5. 【Java】利用循环嵌套实现输出一天的小时和分钟
  6. 个人猜测一下《黑神话:悟空》的部分剧情
  7. 使用ssh远程连接时的一些注意问题
  8. ddos常见攻击报文
  9. /etc目录下重要文件解释
  10. gt爵士变形步骤_编码广播:编码时您可以听24/7爵士节奏