NPCHard 2013-08-19 07:07
浏览 2628

VS2010 MFC tab control控件

我将标签设置在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;   
}   

}

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
    • ¥15 matlab有关常微分方程的问题求解决
    • ¥15 perl MISA分析p3_in脚本出错
    • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
    • ¥15 ubuntu虚拟机打包apk错误
    • ¥199 rust编程架构设计的方案 有偿
    • ¥15 回答4f系统的像差计算
    • ¥15 java如何提取出pdf里的文字?
    • ¥100 求三轴之间相互配合画圆以及直线的算法
    • ¥100 c语言,请帮蒟蒻写一个题的范例作参考