资源描述:
《百叶窗式面板组》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、百叶窗式面板组利用百叶窗式面板组可增大窗口的可利用面积,而且把常用工具放在窗口中比放在菜单中使用更方便,现在一些大型软件如Photoshop、Dreamweaver等都采用了这种方式。在这些软件中,百叶窗式面板组都做成了可停靠的窗口,我没有这种能力,只能做成固定位置的控件组,使用时只能用在对话框或具有CFormView的视图中,整个制作很粗糙,希望高手能加以改造。本程序的核心思路是调整控件的位置和显示/隐藏控件,当一个面板被收起或展开时,只要把它下面的控件都隐藏或显示出来,再调整各面板控件位置,这样整个面板组就像百叶窗一样可以收放自如了。显示/隐藏控件:CWnd*pWnd;
2、pWnd=GetDlgItem(控件ID号);pWnd->ShowWindow(nShow);GetDlgItem()函数用于获取控件的指针;ShowWindow()函数用于显示/隐藏控件,当nShow为SW_SHOW时,显示控件,为SW_HIDE时隐藏控件。修改控件位置:CWnd*pWnd;pWnd=GetDlgItem(控件ID号);pWnd->SetWindowPos(NULL,x,y,0,0,SWP_NOZORDER
3、SWP_NOSIZE);SetWindowPos()函数把控件移到窗口的(x,y)处,大小不变这个程序的设计难点在控制控件的位置上,应该尽量采用相对位
4、置。在这里只要抓住在各种情况下标题条的位置就可以了,标题条下的各控件位置都是相对于标题条的,当标题条位置改变时,重新计算一下控件位置就可以了。我定义了一个数组变量CPointm_TitlePt[3]存放三个标题条的位置,其值在收放面板时进行设定。面板1的标题条是固定的,只要设置好初值就行了;面板2的标题条是相对于面板1的标题条的,有两种可能:当面版1展开时,其y坐标=标题条1.y+面板1高度,即:m_TitlePt[1].y=m_TitlePt[0].y+m_BoxHeight[0];当面版1收起时,其y坐标=标题条1.y+标题条1高度,即:m_TitlePt[1].y=m
5、_TitlePt[0].y+m_TitleHeight;面板3的标题条是相对于面板2的标题条的,也有两种可能:当面版2展开时,其y坐标=标题条2.y+面板2高度,即:m_TitlePt[2].y=m_TitlePt[1].y+m_BoxHeight[1];当面版2收起时,其y坐标=标题条2.y+标题条2高度,即:m_TitlePt[2].y=m_TitlePt[1].y+m_TitleHeight;以下就是计算面板3各部分位置的函数:voidCCurtainBoxDlg::CalculateControlPos3(){ m_TitlePt[2].x=m_BoxRext.le
6、ft; //标题条位置(左上角坐标) if(b_Mark2) //面板2是展开的 m_TitlePt[2].y=m_TitlePt[1].y+m_BoxHeight[1]; else //面板2是收起的 m_TitlePt[2].y=m_TitlePt[1].y+m_TitleHeight; m_ControlPt3[0]=CPoint(m_TitlePt[2].x+5,m_TitlePt[2].y+m_TitleHeight+7); //控件位置 m_ControlPt3[1]=CPoint(m_TitlePt[2].x+85,m_TitlePt[2].y+m_T
7、itleHeight+7); m_ControlPt3[2]=CPoint(m_TitlePt[2].x+5,m_TitlePt[2].y+m_TitleHeight+35);}面板下各控件位置是经反复调节确定的。其它两个面板用类似方法计算。计算好位置后,就可以重新定位位置了,以下为设置面板3各部分位置的函数:voidCCurtainBoxDlg::SetBox3Pos(){ CWnd*pWnd=GetDlgItem(IDC_TITLE3); pWnd->SetWindowPos(NULL,m_TitlePt[2].x,m_TitlePt[2].y, 0,0,SW
8、P_NOSIZE
9、SWP_NOZORDER); //调整标题栏位置 inti; for(i=0;i { pWnd=GetDlgItem(m_Box3ID[i]); pWnd->SetWindowPos(NULL,m_ControlPt3[i].x,m_ControlPt3[i].y, 0,0,SWP_NOSIZE
10、SWP_NOZORDER); //调整控件位置 }}其中,BOX3_NUMBER为面板3中控件数,m_Box3ID[]存放控件ID号的数组,其值在初始化时已设置。解决了控件位置后,就该考虑