MFC 中tab contrl 控件 问题

在MFC应用中,当将Tab Control设置为底部显示时,虽然标签可点击,但对话框内容无法显示且无切换效果。代码中已尝试插入多个标签并创建相关对话框,但问题依然存在。主要代码包括插入标签项、创建对话框及响应标签切换事件的处理。当尝试显示或隐藏不同对话框以匹配所选标签时,底部位置的显示问题仍未解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我将标签设置在bottom时,可以显示标签并可以点击,但是对话框没有内容显示 更没有切换效果,请问这是何故?但是我设置在顶部时,一切正常!


附上简短的代码:

在OnInitDialog中如下:

SetIcon(m_hIcon, TRUE);  // 设置大图标
SetIcon(m_hIcon, FALSE);  // 设置小图标

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

CRect tabRect;   // 标签控件客户区的位置和大小   
  
    m_tab.InsertItem(0, _T("JAVA开发网"));         // 插入第一个标签“鸡啄米”   
    m_tab.InsertItem(1, _T("Android开发网"));// 插入第二个标签“Android开发网”
m_tab.InsertItem(2, _T("MFC开发网"));


    m_dialog1.Create(IDD_DIALOG1,&m_tab);    // 创建第一个标签页   
    m_dialog2.Create(IDD_DIALOG2,&m_tab); // 创建第二个标签页   
m_dialog3.Create(IDD_DIALOG3,&m_tab);
    m_tab.GetClientRect(&tabRect);    // 获取标签控件客户区Rect   
    // 调整tabRect,使其覆盖范围适合放置标签页   
    tabRect.left += 1;                  
    tabRect.right -= 1;   
    tabRect.top -= 1;   
    tabRect.bottom +=20;   
    // 根据调整好的tabRect放置m_jzmDlg子对话框,并设置为显示   
    m_dialog1.SetWindowPos(NULL, tabRect.left, tabRect.bottom, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW);   
    // 根据调整好的tabRect放置m_androidDlg子对话框,并设置为隐藏   
    m_dialog2.SetWindowPos(NULL, tabRect.left, tabRect.bottom, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);   
    m_dialog3.SetWindowPos(NULL, tabRect.left, tabRect.bottom, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);  



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



响应函数如下:

void Ctest26Dlg::OnTcnSelchangeTab1(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: 在此添加控件通知处理程序代码
*pResult = 0;


CRect tabRect;    // 标签控件客户区的Rect   
  
    // 获取标签控件客户区Rect,并对其调整,以适合放置标签页   
    m_tab.GetClientRect(&tabRect);   
    tabRect.left += 1;   
    tabRect.right -= 1;   
    tabRect.top -= 1;   
    tabRect.bottom += 20;   
  
    switch (m_tab.GetCurSel())   
    {   
    // 如果标签控件当前选择标签为“鸡啄米”,则显示m_jzmDlg对话框,隐藏m_androidDlg对话框   
    case 0:   
        m_dialog1.SetWindowPos(NULL, tabRect.left, tabRect.bottom, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW);   
        m_dialog2.SetWindowPos(NULL, tabRect.left, tabRect.bottom, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);   
m_dialog3.SetWindowPos(NULL, tabRect.left, tabRect.bottom, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);  

        break;   
    // 如果标签控件当前选择标签为“Android开发网”,则隐藏m_jzmDlg对话框,显示m_androidDlg对话框   
    case 1:   
        m_dialog1.SetWindowPos(NULL, tabRect.left, tabRect.bottom, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);   
        m_dialog2.SetWindowPos(NULL, tabRect.left, tabRect.bottom, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW);  
m_dialog3.SetWindowPos(NULL, tabRect.left, tabRect.bottom, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);  
        break;   
case 2:   
        m_dialog1.SetWindowPos(NULL, tabRect.left, tabRect.bottom, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);   
        m_dialog2.SetWindowPos(NULL, tabRect.left, tabRect.bottom, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);  
m_dialog3.SetWindowPos(NULL, tabRect.left, tabRect.bottom, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW);  
        break;   


    default:   
        break;   
    }   
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值