当前位置:C++技术网 > 资讯 > MFC Tabcontrol 控件 如何设置标签页属性

MFC Tabcontrol 控件 如何设置标签页属性

更新时间:2017-03-30 10:31:16浏览次数:1+次

原本是按键贴图做出切换界面的效果,改用Tabcontrol后切换界面方便了,但是界面没有原来的效果了。想知道如何修改标签属性的位置 ,而且我现在加载的图片 并没有完全显示出来,改如何修改属性页做出原来界面的效果呢?

原图:

改用Tabcontrol控件后:

控制代码如下:


Subdlg.Create(IDD_SUBJECT_DIALOG, GetDlgItem(IDC_TABTEST));
Samdlg.Create(IDD_SAMTEST_DIALOG, GetDlgItem(IDC_TABTEST));
Repdlg.Create(IDD_REPORT_DIALOG, GetDlgItem(IDC_TABTEST));

//获得IDC_TABTEST客户区大小 
CRect rs;
m_tab.GetClientRect(&rs);
//调整子对话框在父窗口中的位置 
rs.top += 15;
rs.bottom -= 5;
rs.left += 105;
rs.right -= 15;
//设置子对话框尺寸并移动到指定位置 
Subdlg.MoveWindow(&rs);
Samdlg.MoveWindow(&rs);
Repdlg.MoveWindow(&rs);
 
//分别设置隐藏和显示 
Subdlg.ShowWindow(true);
Samdlg.ShowWindow(false);
Repdlg.ShowWindow(false);
 
//设置默认的选项卡 
m_tab.SetCurSel(0);

CImageList pImage  ; 
pImage.Create(80,80, ILC_COLOR32 | ILC_MASK, 6, 1);  //初始化图像的类型
// 添加位图,并使黑色为透明色,如果图像列表大小和位图大小不一致可能会导致天添加失败 
CBitmap bmp1,bmp2,bmp3,bmp4,bmp5,bmp6;  
bmp1.LoadBitmap(IDB_BITMAP1);
bmp2.LoadBitmap(IDB_BITMAP2);
bmp3.LoadBitmap(IDB_BITMAP3);
bmp4.LoadBitmap(IDB_BITMAP4);
bmp5.LoadBitmap(IDB_BITMAP5);
bmp6.LoadBitmap(IDB_BITMAP6);  
 
pImage.Add(&bmp1, ILC_COLOR8 | ILC_MASK);
pImage.Add(&bmp2, ILC_COLOR8 | ILC_MASK);
pImage.Add(&bmp3, ILC_COLOR8 | ILC_MASK);
pImage.Add(&bmp4, ILC_COLOR8 | ILC_MASK);
pImage.Add(&bmp5, ILC_COLOR8 | ILC_MASK);
pImage.Add(&bmp6, ILC_COLOR8 | ILC_MASK);
 
m_tab.SetImageList(&pImage);
pImage.Detach();
   TC_ITEM tcItem; //用于指定或者接受tab控件的条目的属性
    tcItem.mask = TCIF_IMAGE;


tcItem.iImage = 0;
m_tab.InsertItem(0, &tcItem);
tcItem.iImage = 1;
m_tab.InsertItem(1, &tcItem);
tcItem.iImage = 2;
m_tab.InsertItem(2, &tcItem);
tcItem.iImage = 3;
m_tab.InsertItem(3, &tcItem);
tcItem.iImage = 4;
m_tab.InsertItem(4, &tcItem);
tcItem.iImage = 5;
m_tab.InsertItem(5, &tcItem);
tcItem.iImage = 6;
m_tab.InsertItem(6, &tcItem);
return TRUE;  // return TRUE unless you set the focus to a control




C++技术网会员解答:

    你好,感谢对C++技术网的支持与信任。
    用之前的贴图切换界面,美观,但是切换界面不方便。使用TabControl方便切换图片,但是界面实现不理想。理想很丰满,现实很骨感!哈哈哈。那我来给你指个路,帮助你丰满一下现实吧。
    你的最终效果应该就是切换方便界面美观。所以我们从两方面来考虑问题:
1.界面美观
    要说界面美观,原先的做法,你已经实现了。只是在tabcontrol上出了问题。那我们来看看tabcontrol如何解决。要说tabcontrol的背景贴图,你已经实现了。问题在于图片显示不完整,而且还有空白。tabcontrol会自动缩放图片来适应界面的,而不是精准的像素定位。所以说,如果比例不对,就会出现各种问题。你要么调整图片的规格来适应标签的大小,要么设置标签的大小来适应图片的规格。我相信既然你能做到这个点上了,设置标签大小不会有问题的。而适配的时候,你查看RC资源里的定义,看看标签大小,然后算出比例,然后再算出图片的大小。或者反着来算。如果比例一致,一般都可以正常铺满。
    这是基于界面美观方面的建议。
2.切换方便
    使用tabcontrol之后,切换确实会省事多了。毕竟自己来管理界面的显示和隐藏,确实挺费劲。不过主要是因为姿势不对引起的。为什么tabcontrol能够这么方便?为什么自己做的就不方便?请你思考这两个问题。如果我们自己能够参考tabcontrol的实现思路,那么切换不就方便了!所以我来给你一个参考思路,你就可以在你原先的界面上实现方便的切换了。
    界面切换,你觉得麻烦,我推测你是直接在一个对话框上控制多组控件的显示和隐藏。这样确实很麻烦的。我之前也这么干过,我能体会其中的麻烦。
    tabcontrol是将控制和显示的内容分离,标签页按钮和下一步确定按钮等属于控制界面,标签页的内容属于内容界面。多个内容界面相互独立,每一个界面的内容都放在一个单独的内容界面里。在界面切换时,是将整个界面进行的显示和隐藏处理,自然也就方便切换了。而在单个界面的处理,又和单个对话框一样方便。然而tabcontrol预设的功能,界面可能不是很好看,但是这样的实现思路确实一个很好的。你可以在自己已有的基础上,采用控制和内容分离的方案,就可以实现这样的效果。而我们要做的就是在主对话框上创建多一个子对话框,然后控制这些子对话框的显示和隐藏,就可以方便的管理了。同时,我们也是基于模板来创建,对于单个的子对话框,做事件处理和主对话框一样一样的。这样界面可以很灵活,不需要tabcontrol了。
    在切换方便上面,你只需要稍微改造一下切换的逻辑,就可以了。

    至于具体采用哪种方案,你可以根据你的实际情况来选择。