VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

有编程疑问吗?还请到提问专区发帖提问!
搜索
查看: 875|回复: 5

[求助] 关于MFC中 Tab控件的使用问题!求大神帮我解答一下

[复制链接]
12_avatar_middle
在线会员 maidi 发表于 2017-8-10 12:36:28 | 显示全部楼层 |阅读模式
3驿站币
现在我有一个对话框,名为IDD_DISPLAY_DLG,为它关联的类是CDisplayDlg。在这个对话框上面我放了一个·tab控件,有两个子属性页,已经设置好了,初始化的工作也最好了。现在问题是我需要把这个带有Tab控件的对话框放到一个主对话框上面,这个主对话框ID为 IDD_MAINFRAMEVIEW,然后与它相关的类是CMainFrameView,请问一下我该如何将这个带有Tab控件的对话框放入到这个主对话框理面并完成初始化工作让其显示?????

求帮我解答一下,最好给我一下相关代码!!!谢谢了





上一篇:vs 解决方案标签切换快捷键
下一篇:如何获取指定控件的信息?

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

51_avatar_middle
online_admins Syc 发表于 2017-8-10 13:03:24 | 显示全部楼层
可以将 IDD_DISPLAY_DLG 对话框的属性样式设置为 Child,之后用 CDisplayDlg 类创建一个非模态类型的对话框,父窗口指定 CMainFrameView 就可以了

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

12_avatar_middle
ico_lz  楼主| maidi 发表于 2017-8-10 15:07:17 | 显示全部楼层
Syc 发表于 2017-8-10 13:03
可以将 IDD_DISPLAY_DLG 对话框的属性样式设置为 Child,之后用 CDisplayDlg 类创建一个非模态类型的对话框 ...


能给我写一下代码吗?谢谢您

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

51_avatar_middle
online_admins Syc 发表于 2017-8-10 15:28:15 | 显示全部楼层
maidi 发表于 2017-8-10 15:07
能给我写一下代码吗?谢谢您

什么都没有,工程模版也没有,拿什么写啊
楼主先按照我的思路试试,毕竟你手头有工程源码

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

97_avatar_middle
在线会员 kuroro 发表于 2017-8-10 15:56:48 | 显示全部楼层
66666666666

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

12_avatar_middle
ico_lz  楼主| maidi 发表于 2017-8-11 16:48:29 | 显示全部楼层
本帖最后由 maidi 于 2017-8-11 16:53 编辑
maidi 发表于 2017-8-10 15:07
能给我写一下代码吗?谢谢您


今天用您的方法试了一下 把带有Tab控件的对话框添加到了主对话框里面,界面是出来了 ,但是当我点击tab控件中的第二个子页面的时候出现了断言失败,直接中断操作好像出现了空指针,我百度了一下问题大概是窗口没创建或者是创建失败。请问这个怎么解决呀??我觉得我代码没啥问题的  这是我程序中CDisplayDlg源文件的代码,IDD_DATA_DLG和IDD_SENSOR_RT_DLG 分别是那两个子页面的ID 。 然后这两个子页面的类分别是CDataDlg和 CSensorRTDlg      麻烦您帮我看一下这段代码吧吧,谢谢
void CDisplayDlg::InitTab()
{
        TCITEM tcItem;
        tcItem.mask = TCIF_TEXT;
        tcItem.pszText = _T("温度值");
        m_CtrlTab.InsertItem(0,&tcItem);
        tcItem.pszText = _T("实时曲线");
        m_CtrlTab.InsertItem(1,&tcItem);

        CRect rc;
        GetClientRect (rc);
        m_CtrlTab.MoveWindow(rc.left,rc.top+10,rc.Width(),rc.Height()-50);

}

void CDisplayDlg::InitDisplayDlg()
{
        CRect rcClient;
        m_CtrlTab.GetClientRect(rcClient);
        m_pDisplayDlg[0] = new CDataDlg(&m_CtrlTab);
        m_pDisplayDlg[0] -> Create(IDD_DATA_DLG,&m_CtrlTab);
        m_pDisplayDlg[0]->MoveWindow(rcClient.left,rcClient.top+20,rcClient.Width(),rcClient.Height()-20);
        m_pDisplayDlg[0]->ShowWindow(TRUE);
       
       
       
}
       

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

        InitTab();
        InitDisplayDlg();

        return TRUE;  // return TRUE unless you set the focus to a control
        // 异常: OCX 属性页应返回 FALSE
}

void CDisplayDlg::OnSize(UINT nType, int cx, int cy)
{
        CDialogEx::OnSize(nType, cx, cy);

        // TODO: 在此处添加消息处理程序代码

        if(m_CtrlTab.GetSafeHwnd())
        {
                m_CtrlTab.MoveWindow(10,10,cx-10,cy-10);
                CRect clientRect;
                m_CtrlTab.GetClientRect(clientRect);
                for(int i = 0;i<2;i++)
                {
                        if(m_pDisplayDlg)
                        {
                                m_pDisplayDlg->MoveWindow(clientRect.left,clientRect.top+20,clientRect.Width(),clientRect.Height()-20);
                        }
                }
        }
}

/////切换tab页面
void CDisplayDlg::OnSelchangeTab(NMHDR *pNMHDR, LRESULT *pResult)
{
        // TODO: 在此添加控件通知处理程序代码、
        CRect clientRect;
        m_CtrlTab.GetClientRect(clientRect);

        int iCur = m_CtrlTab.GetCurSel();/////获得当前的选择

        switch (iCur)
        {
        case 0:
                if(NULL == m_pDisplayDlg[0])
                {
                        m_pDisplayDlg[0] = new CDataDlg(&m_CtrlTab);
                        m_pDisplayDlg[0] -> Create(IDD_DATA_DLG,&m_CtrlTab);
                }
                break;
        case 1:
                if(NULL == m_pDisplayDlg[1])
                {
                        m_pDisplayDlg[1] = new CSensorRTDlg(&m_CtrlTab);
                        m_pDisplayDlg[1] -> Create(IDD_SENSOR_RT_DLG,&m_CtrlTab);
                }
                break;
        }
        m_pDisplayDlg[iCur]->MoveWindow(clientRect.left,clientRect.top+20,clientRect.Width(),clientRect.Height()-20);

        for(int i = 0;i<2;i++)
        {
                if(m_pDisplayDlg)
                {
                        m_pDisplayDlg->ShowWindow(iCur == i);
                }
                       
        }



        *pResult = 0;
}





void CDisplayDlg::OnDestroy()
{
        CDialogEx::OnDestroy();

        // TODO: 在此处添加消息处理程序代码

        for( int i = 0 ;i < 2; i++)
        {
                if(m_pDisplayDlg)
                {
                        m_pDisplayDlg -> DestroyWindow();
                        delete m_pDisplayDlg;
                        m_pDisplayDlg = NULL;
                }
        }
}

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

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

QQ
QQ在线咨询
联系电话
13591366679
手机扫一扫 关注本站精彩内容
wxqrcode

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

GMT+8, 2018-11-16 12:22

Powered by Discuz! X3.4

© 2009-2018 cctry.com

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