静态切分窗口的隐藏与显示

 我FUKE!写了一大堆,没保存住,我想哭。。。不管了,把代码贴出来就算了,不懂的留言问我。
void CUsefulSplitterWnd::HideColumn(int place,int colHide)
{
 int rowActive, colActive;
    if (GetActivePane(&rowActive, &colActive) != NULL &&
         colActive == place)
    {
          if (++colActive >= m_nCols)
              colActive = 0;
          SetActivePane(rowActive, colActive);
    }

 int id=AFX_IDW_PANE_FIRST;
 for(int i=0;i<place;i++)
 {
  CWnd* pPane=GetPane(0,i);
  pPane->SetDlgCtrlID(id+i);
  pPane->ShowWindow(SW_SHOW);
 }
 for(i=place;i<m_nCols-1;i++)
 {
  CWnd* pPane=GetPane(0,i+1);
  pPane->SetDlgCtrlID(id+i);
  pPane->ShowWindow(SW_SHOW);
 }
 m_ppView[colHide]->SetDlgCtrlID(id+i);
 m_ppView[colHide]->ShowWindow(SW_HIDE);

 m_nCols--;
 m_pSavedColInfo[colHide] = m_pColInfo[place];
 for(i=place;i<m_nCols;i++)
  m_pColInfo[i] = m_pColInfo[i+1];

 RecalcLayout();
}
AFX_IDW_PANE_FIRST //第一个视图的ID号 MFC内部常量
m_nCols  //当前视图的个数  MFC内部变量
m_pColInfo  //包含当前每个视图的大小和位置等信息的结构体数组  MFC内部变量
m_ppView //存储所有视图指针的数组 我定义的变量
m_pSavedColInfo //用来存储被删除视图的大小和位置等信息的结构体数组 我定义的变量
SetDlgCtrlID(  )   //设置窗口或对话框新的ID号

例如:
m_ppView[colHide]->SetDlgCtrlID(id+i);
 m_ppView[colHide]->ShowWindow(SW_HIDE);
两句代码的作用是把要隐藏的视图移动到第i个位置,并使其隐藏。

大体思想,把要隐藏的视图后面的视图均往前移动一个位置,然后把要隐藏的视图移动到最后的位置并使其隐藏,然后使m_nCols减一,再RecalcLayout( )一把就OK了!

CodeProject上面有个牛人写了个CExtSplitter,非常好用!看懂我的代码后再看他的就容易多了。
源地址:http://www.codeproject.com/KB/splitter/extsplitter.aspx
用的时候要注意,C2DArray和CExtSplitter两个类都要导入,除了在使用的地方包含其头文件外,还要修改一下你的stdafx.h,看看和他的stdafx.h有什么不同你就知道了。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值