原本是按键贴图做出切换界面的效果,改用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了。
在切换方便上面,你只需要稍微改造一下切换的逻辑,就可以了。
至于具体采用哪种方案,你可以根据你的实际情况来选择。