VS2010/MFC编程入门之三十三(常用控件:标签控件Tab Control 下)

上一节中鸡啄米讲了标签控件知识的上半部分,本节继续讲下半部分。

       标签控件的创建

       MFC为标签控件的操作提供了CTabCtrl类。

       与之前的控件类似,创建标签控件可以在对话框模板中直接拖入Tab Control,也可以使用CTabCtrl类的Create成员函数创建。Create函数的原型如下:

virtual BOOL Create(
  DWORD dwStyle,
  const RECT& rect,
  CWnd* pParentWnd,
  UINT nID
);

       参数dwStyle为标签控件的风格,rect为标签控件的位置和大小,pParentWnd为指向标签控件父窗口的指针,nID指定标签控件的ID。这里还是要具体说下dwStyle,下面列出了几种主要的控件风格:

       TCS_BUTTONS:标签(控件上部用来选择标签页的位置)外观为按钮风格,且整个控件周围没有边框。

       TCS_FIXEDWIDTH :所有标签具有相同的宽度。

       TCS_MULTILINE:标签以多行显示,如果需要,可以显示所有标签。

       TCS_SINGLELINE:只显示一行标签,用户可以滚动着看其他标签。

       TCS_TABS:标签以普通标签样式显示,且整个控件周围有边框。

       如果想了解标签控件的所有风格,可以查阅MSDN。

       CTabCtrl类的主要成员函数

       int GetCurSel( ) const;

       获取标签控件中当前选择标签的索引。如果成功则返回选择标签的索引,否则返回-1。

       BOOL GetItem(int nItem,TCITEM* pTabCtrlItem) const;

       获取标签控件中某个标签的信息。参数nItem为标签索引,pTabCtrlItem为指向TCITEM结构体的指针,用来接收标签信息。若获取成功返回TRUE,否则返回FALSE。

       int GetItemCount( ) const;

       获取标签控件中标签的数量。

       int SetCurSel(int nItem);

       在标签控件中选择某标签。参数nItem为要选择的标签的索引。如果成功则返回之前选择标签的索引,否则返回-1。

       BOOL SetItem(int nItem,TCITEM* pTabCtrlItem);

       设置某标签的所有或部分属性。参数nItem为标签的索引,pTabCtrlItem为指向TCITEM结构体的指针,包含了新的标签属性。成功则返回TRUE,否则返回FALSE。

       BOOL DeleteAllItems( );

       删除标签控件中所有标签。

       BOOL DeleteItem(int nItem);

       删除标签控件中的某个标签。参数nItem为要删除标签的索引。

       LONG InsertItem(int nItem,LPCTSTR lpszItem);

       在标签控件中插入新的标签。参数nItem为新标签的索引,lpszItem为标签文本字符串。如果插入成功则返回新标签的索引,否则返回-1。

       标签控件的应用实例

       最后鸡啄米依然是给大家写一个简单的实例,说明CTabCtrl类的几个成员函数及标签控件通知消息等的使用方法。

       此实例实现的功能:在一个标签控件中加入两个标签页,标签文本分别为“鸡啄米”和“Android开发网”,点击不同的标签显示不同的标签页。下面是具体实现步骤:

       1. 创建一个基于对话框的MFC工程,名称设置为“Example33”。

       2. 在自动生成的对话框模板IDD_EXAMPLE33_DIALOG中,删除“TODO: Place dialog controls here.”静态文本框、“OK”按钮和“Cancel”按钮。添加一个Tab Control控件,并为其关联一个CTabCtrl类型的控件变量m_tab。

       3. 创建两个新的对话框,ID分别设为IDD_JIZHUOMI_DIALOG、IDD_ANDROID_DIALOG,两者都将Border属性设为None,Style属性设为Child。在对话框模板IDD_JIZHUOMI_DIALOG中加入一个静态文本框,Caption属性设为“鸡啄米 www.jizhuomi.com”,并为其生成对话框类CJzmDlg;在对话框模板IDD_ANDROID_DIALOG中也加入一个静态文本框,Caption属性设为“Android开发网 www.jizhuomi.com/android”,并为其生成对话框类CAndroidDlg。

       4. 在“Example33Dlg.h”文件中包含“JzmDlg.h”和“AndroidDlg.h”两个头文件,然后继续在“Example33Dlg.h”文件中为CExample33Dlg类添加两个成员变量:

       CJzmDlg m_jzmDlg;
       CAndroidDlg m_androidDlg;

       5.  在CExample33Dlg对话框初始化时,我们也初始化标签控件。修改CExample33Dlg::OnInitDialog()函数如下:

C++代码
  1. BOOL CExample33Dlg::OnInitDialog()   
  2. {   
  3.     CDialogEx::OnInitDialog();   
  4.   
  5.     // Add "About..." menu item to system menu.   
  6.   
  7.     // IDM_ABOUTBOX must be in the system command range.   
  8.     ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);   
  9.     ASSERT(IDM_ABOUTBOX < 0xF000);   
  10.   
  11.     CMenu* pSysMenu = GetSystemMenu(FALSE);   
  12.     if (pSysMenu != NULL)   
  13.     {   
  14.         BOOL bNameValid;   
  15.         CString strAboutMenu;   
  16.         bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);   
  17.         ASSERT(bNameValid);   
  18.         if (!strAboutMenu.IsEmpty())   
  19.         {   
  20.             pSysMenu->AppendMenu(MF_SEPARATOR);   
  21.             pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);   
  22.         }   
  23.     }   
  24.   
  25.     // Set the icon for this dialog.  The framework does this automatically   
  26.     //  when the application's main window is not a dialog   
  27.     SetIcon(m_hIcon, TRUE);         // Set big icon   
  28.     SetIcon(m_hIcon, FALSE);        // Set small icon   
  29.   
  30.     // TODO: Add extra initialization here   
  31.     CRect tabRect;   // 标签控件客户区的位置和大小   
  32.   
  33.     m_tab.InsertItem(0, _T("鸡啄米"));         // 插入第一个标签“鸡啄米”   
  34.     m_tab.InsertItem(1, _T("Android开发网"));  // 插入第二个标签“Android开发网”   
  35.     m_jzmDlg.Create(IDD_JIZHUOMI_DIALOG, &m_tab);    // 创建第一个标签页   
  36.     m_androidDlg.Create(IDD_ANDROID_DIALOG, &m_tab); // 创建第二个标签页   
  37.   
  38.     m_tab.GetClientRect(&tabRect);    // 获取标签控件客户区Rect   
  39.     // 调整tabRect,使其覆盖范围适合放置标签页   
  40.     tabRect.left += 1;                  
  41.     tabRect.right -= 1;   
  42.     tabRect.top += 25;   
  43.     tabRect.bottom -= 1;   
  44.     // 根据调整好的tabRect放置m_jzmDlg子对话框,并设置为显示   
  45.     m_jzmDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW);   
  46.     // 根据调整好的tabRect放置m_androidDlg子对话框,并设置为隐藏   
  47.     m_androidDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);   
  48.   
  49.     return TRUE;  // return TRUE  unless you set the focus to a control   
  50. }  

       6. 运行程序,查看结果,这时我们发现切换标签时,标签页并不跟着切换,而总是显示CJzmDlg对话框。

       7. 我们要实现的是标签页的切换效果,所以还要为m_tab标签控件的通知消息TCN_SELCHANGE添加处理函数,并修改如下:

C++代码
  1. void CExample33Dlg::OnTcnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult)   
  2. {   
  3.     // TODO: Add your control notification handler code here   
  4.     *pResult = 0;   
  5.     CRect tabRect;    // 标签控件客户区的Rect   
  6.   
  7.     // 获取标签控件客户区Rect,并对其调整,以适合放置标签页   
  8.     m_tab.GetClientRect(&tabRect);   
  9.     tabRect.left += 1;   
  10.     tabRect.right -= 1;   
  11.     tabRect.top += 25;   
  12.     tabRect.bottom -= 1;   
  13.   
  14.     switch (m_tab.GetCurSel())   
  15.     {   
  16.     // 如果标签控件当前选择标签为“鸡啄米”,则显示m_jzmDlg对话框,隐藏m_androidDlg对话框   
  17.     case 0:   
  18.         m_jzmDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW);   
  19.         m_androidDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);   
  20.         break;   
  21.     // 如果标签控件当前选择标签为“Android开发网”,则隐藏m_jzmDlg对话框,显示m_androidDlg对话框   
  22.     case 1:   
  23.         m_jzmDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);   
  24.         m_androidDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW);   
  25.         break;   
  26.     default:   
  27.         break;   
  28.     }   
  29. }  

       8. 再运行程序,最终的标签页切换效果如下面两图:

标签控件第一个标签页

 

标签页第二个标签页

       经过两讲内容,终于把标签控件的主要知识讲完了。如果想了解更多的相关内容,可以查看MSDN。鸡啄米最后还是谢谢各位的关注和支持。

转载请标明本文地址: http://www.jizhuomi.com/software/207.html
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、VS2010/MFC编程入门教程之目录 第一部分:VS2010/MFC开发环境 VS2010/MFC编程入门之前言 VS2010/MFC编程入门之一(VS2010与MSDN安装过程图解) 第二部分:VS2010/MFC应用程序框架 VS2010/MFC编程入门之二(利用MFC向导生成单文档应用程序框架) VS2010/MFC编程入门之三(VS2010应用程序工程中文件的组成结构) VS2010/MFC编程入门之四(MFC应用程序框架分析) VS2010/MFC编程入门之五(MFC消息映射机制概述) 第三部分:对话框 VS2010/MFC编程入门之六(对话框:创建对话框模板和修改对话框属性) VS2010/MFC编程入门之七(对话框:为对话框添加控件VS2010/MFC编程入门之八(对话框:创建对话框类和添加控件变量) VS2010/MFC编程入门之九(对话框:为控件添加消息处理函数) VS2010/MFC编程入门之十(对话框:设置对话框控件Tab顺序) VS2010/MFC编程入门之十一(对话框:模态对话框及其弹出过程) VS2010/MFC编程入门之十二(对话框:非模态对话框的创建及显示) VS2010/MFC编程入门之十三(对话框:属性页对话框及相关类的介绍) VS2010/MFC编程入门之十四(对话框:向导对话框的创建及显示) VS2010/MFC编程入门之十五(对话框:一般属性页对话框的创建及显示) VS2010/MFC编程入门之十六(对话框:消息对话框) VS2010/MFC编程入门之十七(对话框:文件对话框) VS2010/MFC编程入门之十八(对话框:字体对话框) VS2010/MFC编程入门之十九(对话框:颜色对话框) 第四部分:常用控件 VS2010/MFC编程入门之二十(常用控件:静态文本框) VS2010/MFC编程入门之二十一(常用控件:编辑框Edit ControlVS2010/MFC编程入门之二十二(常用控件:按钮控件Button、Radio Button和Check Box) VS2010/MFC编程入门之二十三(常用控件:按钮控件的编程实例) VS2010/MFC编程入门之二十四(常用控件:列表框控件ListBox) VS2010/MFC编程入门之二十五(常用控件:组合框控件Combo Box) VS2010/MFC编程入门之二十六(常用控件:滚动条控件Scroll Bar) VS2010/MFC编程入门之二十七(常用控件:图片控件Picture ControlVS2010/MFC编程入门之二十八(常用控件:列表视图控件List Control 上) VS2010/MFC编程入门之二十九(常用控件:列表视图控件List Control 下) VS2010/MFC编程入门之三十(常用控件:树形控件Tree Control 上) VS2010/MFC编程入门之三十一(常用控件:树形控件Tree Control 下) VS2010/MFC编程入门之三十二(常用控件标签控件Tab Control 上) VS2010/MFC编程入门三十三常用控件标签控件Tab Control 下) 第五部分:菜单、工具栏与状态栏 VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解) VS2010/MFC编程入门之三十五(菜单:菜单及CMenu类的使用) VS2010/MFC编程入门之三十六(工具栏:工具栏资源及CToolBar类) VS2010/MFC编程入门之三十七(工具栏:工具栏的创建、停靠与使用) VS2010/MFC编程入门之三十八(状态栏的使用详解) 第六部分:文档、视图和框架 VS2010/MFC编程入门之三十九(文档、视图和框架:概述) VS2010/MFC编程入门之四十(文档、视图和框架:各对象之间的关系) VS2010/MFC编程入门之四十一(文档、视图和框架:分割窗口) 第七部分:MFC常用VS2010/MFC编程入门之四十二(MFC常用类:CString类) VS2010/MFC编程入门之四十三(MFC常用类:CTime类和CTimeSpan类) VS2010/MFC编程入门之四十四(MFC常用类:定时器Timer) VS2010/MFC编程入门之四十五(MFC常用类:CFile文件操作类) VS2010/MFC编程入门之四十六(MFC常用类:MFC异常处理) 第八部分:字体和文本输出 VS2010/MFC编程入门之四十七(字体和文本输出:CFont字体类) VS2010/MFC编程入门之四十八(字体和文本输出:文本输出) 第九部分:图形图像 VS2010/MFC编程入门之四十九(图形图像:CDC类及其屏幕绘图函数) VS2010/MFC编程入门之五十(图形图像:GDI对象之画笔CPen) VS2010/MFC编程入门之五十一(图形图像:GDI对象之画刷CBrush) 第十部分:Ribbon界面开发 VS2010/MFC编程入门之五十二(Ribbon界面开发:创建Ribbon样式的应用程序框架) VS2010/MFC编程入门之五十三(Ribbon界面开发:为Ribbon Bar添加控件VS2010/MFC编程入门之五十四(Ribbon界面开发:使用更多控件并为控件添加消息处理函数) 本文来源于鸡啄米 http://www.jizhuomi.com/ , 原文地址:http://www.jizhuomi.com/software/257.html
VS2012是Microsoft Visual Studio 2012的缩写,是一款集成开发环境(IDE)软件,用于开发各种应用程序,包括MFC(Microsoft Foundation Class)编程。 MFC是Windows操作系统上的一个C++类库,提供了一系列类和函数,用于开发Windows桌面应用程序。通过使用MFC,开发人员可以更快、更简单地创建并管理Windows应用程序的用户界面、输入输出、文件操作等。 在VS2012中,通过使用MFC进行编程,可以利用MFC提供的各种类和函数,快速构建Windows应用程序。MFC包含了丰富的UI控件,如按钮、文本框、列表框等,开发者可以直接使用这些控件,而无需自己编写复杂的UI代码。 此外,VS2012还提供了图形化设计工具,如资源编辑器和对话框设计器,使得MFC应用程序的设计和布局更加方便。开发者可以通过拖放控件、设置属性等方式,快速创建所需的用户界面。 对于开发者而言,可以通过学习MFC编程,掌握使用MFC类库的技巧,了解如何响应用户交互、处理消息、操作文件等。MFC编程还包含一些高级概念,如多线程编程、数据库访问等,可以进一步提升应用程序的功能和性能。 在实际编程过程中,可以使用VS2012生成PDF文件的功能来输出报表、文档等。通过使用MFC类库中提供的相关类和函数,可以在应用程序中生成和编辑PDF文件。可以根据需要,设置PDF的格式、内容、样式等,以满足不同的需求。 总之,通过VS2012和MFC编程,开发者可以快速、高效地开发Windows应用程序,并且可以利用MFC类库的强大功能,实现各种复杂的操作和任务,包括生成和编辑PDF文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值