VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 1030|回复: 2

老师封装的CTabSheet 类使用Tab控件中出现的问题

[复制链接]
25_avatar_middle
最佳答案
0 
online_vip 发表于 2023-2-2 21:24:24 | 显示全部楼层 |阅读模式
使用CTabSheet类创建第一个tab控件使用没有问题。。。。
在tab控件中,在创建一个tab控件后,只能显示出标签名字,显示不出来新创建的Dialog界面,求助怎么解决

代码如下:
//主对话框初始化函数
  1. #pragma once
  2. #include "TabSheet.h"
  3. #include "CPage1.h"
  4. #include "CPage2.h"

  5. // CMFCApplicationDlg 对话框
  6. class CMFCApplicationDlg : public CDialogEx
  7. {
  8. // 构造
  9. public:
  10.         CMFCApplicationDlg(CWnd* pParent = nullptr);        // 标准构造函数

  11. // 对话框数据
  12. #ifdef AFX_DESIGN_TIME
  13.         enum { IDD = IDD_MFCAPPLICATION_DIALOG };
  14. #endif

  15.         protected:
  16.         virtual void DoDataExchange(CDataExchange* pDX);        // DDX/DDV 支持


  17. // 实现
  18. protected:
  19.         HICON m_hIcon;

  20.         // 生成的消息映射函数
  21.         virtual BOOL OnInitDialog();
  22.         afx_msg void OnPaint();
  23.         afx_msg HCURSOR OnQueryDragIcon();
  24.         DECLARE_MESSAGE_MAP()
  25. public:
  26.         CTabSheet m_tab;
  27.         CPage1 m_page1;
  28.         CPage2 m_page2;
  29. };
复制代码


BOOL CMFCApplicationDlg::OnInitDialog()
{
        CDialogEx::OnInitDialog();

        // 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动
        //  执行此操作
        SetIcon(m_hIcon, TRUE);                        // 设置大图标
        SetIcon(m_hIcon, FALSE);                // 设置小图标

        // TODO: 在此添加额外的初始化代码

        m_tab.AddPage(_T("页面1"), &m_page1, IDD_DIALOG1);
        m_tab.AddPage(_T("页面2"), &m_page2, IDD_DIALOG2);
        m_tab.Show();
       

        return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}[/code]


//Page2界面代码---------------------------------------------------------------------
  1. #include "TabSheet.h"
  2. #include "CPageChild_1.h"
  3. #include "CPageChild_2.h"

  4. // CPage2 对话框

  5. class CPage2 : public CDialogEx
  6. {
  7.         DECLARE_DYNAMIC(CPage2)

  8. public:
  9.         CPage2(CWnd* pParent = nullptr);   // 标准构造函数
  10.         virtual ~CPage2();

  11. // 对话框数据
  12. #ifdef AFX_DESIGN_TIME
  13.         enum { IDD = IDD_DIALOG2 };
  14. #endif

  15. protected:
  16.         virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持

  17.         DECLARE_MESSAGE_MAP()
  18. public:
  19.         CTabSheet m_tab;
  20.         CPageChild_1 m_PageChild1;
  21.         CPageChild_2 m_PageChild2;
  22.         virtual BOOL OnInitDialog();
  23. };
复制代码




  1. BOOL CPage2::OnInitDialog()
  2. {
  3.         CDialogEx::OnInitDialog();

  4.         // TODO:  在此添加额外的初始化

  5.         m_tab.AddPage(_T("子级1"), &m_PageChild1, IDD_DLG_1);
  6.         m_tab.AddPage(_T("子级2"), &m_PageChild2, IDD_DLG_2);
  7.         m_tab.Show();


  8.         return TRUE;  // return TRUE unless you set the focus to a control
  9.                                   // 异常: OCX 属性页应返回 FALSE
  10. }
复制代码
1.png




上一篇:C语言void*数据类型转换的问题
下一篇:求一个算法
25_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2023-2-2 21:39:10 | 显示全部楼层
问题找到了。我把tab的标签放到下面显示就不行了,不知道怎么改
60_avatar_middle
最佳答案
4 
在线会员 发表于 2023-2-3 11:34:29 | 显示全部楼层
ymgsk123 发表于 2023-2-2 21:39
问题找到了。我把tab的标签放到下面显示就不行了,不知道怎么改

话说这个破控件就是当年心态爆炸从C++繁琐的界面编码累觉不爱转战C#界面的根本原因,之二(排第一是大名鼎鼎listctrl的ownerdraw唉),宇宙第一编译器给C#的那种所见即所得直接拖拽重命名就可以完成界面设计和基础动效的做法简直让人爽到位了哎呀那些docker啊panel啊tablelayout啊gridview啊的嵌套组合加上界面invoke和匿名委托事件简直是生产力爆表,谁还会关心一点点搓轮子的痛苦呢,业务快速上线就行了要什么自行车。当然也有又从C#打脸转回来了的其他控件原因,但都瑕不掩瑜了。好了言归正传给你介绍个简单实用的方法,抄微软代码:你另外重新建个MFC窗口程序,把里面各种新特性例如悬浮工具条和菜单啊拖拽悬浮窗口啊拖转悬浮的对话框啊边框啊啥的甚至还有资源浏览器和输出浏览器啊属性浏览器啊啥的全带上,然后你编译运行跑起来后还是可以直接拿来主义的,代码还是比较规范好看的你抄来就用嘛。
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号-4 )|网站地图wx_jqr

GMT+8, 2023-9-28 11:57

Powered by CcTry.CoM

© 2009-2021 cctry.com

快速回复 返回顶部 返回列表