splitex.h
来源:互联网 发布:数据采集与处理投稿 编辑:程序博客网 时间:2024/05/19 23:17
- // splitex.h
- // (c) 1997, Oleg G. Galkin
- classCSplitterWndEx :public CSplitterWnd
- {
- protected:
- int m_nHidedCol; // hide column number, -1 if all columns
- // are shown
- public:
- CSplitterWndEx();
- voidShowColumn();
- voidHideColumn(int colHide);
- // ClassWizard generated virtual function overrides
- //{{AFX_VIRTUAL(CSplitterWndEx)
- //}}AFX_VIRTUAL
- // Generated message map functions
- protected:
- //{{AFX_MSG(CSplitterWndEx)
- // NOTE - the ClassWizard will add and remove member
- // functions here.
- //}}AFX_MSG
- DECLARE_MESSAGE_MAP()
- };
- //////////////////////////////////////////////////////////////////
- //
- // splitex.cpp
- // (c) 1997, Oleg G. Galkin
- #include"stdafx.h"
- #include"splitex.h"
- #ifdef _DEBUG
- #definenew DEBUG_NEW
- #undef THIS_FILE
- staticchar THIS_FILE[]= __FILE__;
- #endif
- //////////////////////////////////////////////////////////////////
- /
- // CSplitterWndEx
- CSplitterWndEx::CSplitterWndEx():
- m_nHidedCol(-1)
- {
- }
- voidCSplitterWndEx::ShowColumn()
- {
- ASSERT_VALID(this);
- ASSERT(m_nCols< m_nMaxCols);
- ASSERT(m_nHidedCol!= -1);
- int colNew= m_nHidedCol;
- m_nHidedCol = -1;
- int cxNew= m_pColInfo[m_nCols].nCurSize;
- m_nCols++; // add a column
- ASSERT(m_nCols== m_nMaxCols);
- // fill the hidden column
- int col;
- for(int row= 0; row< m_nRows; row++)
- {
- CWnd* pPaneShow= GetDlgItem(
- AFX_IDW_PANE_FIRST+ row *16 + m_nCols);
- ASSERT(pPaneShow!= NULL);
- pPaneShow->ShowWindow(SW_SHOWNA);
- for(col = m_nCols- 2; col>= colNew; col--)
- {
- CWnd* pPane= GetPane(row, col);
- ASSERT(pPane!= NULL);
- pPane->SetDlgCtrlID(IdFromRowCol(row, col + 1));
- }
- pPaneShow->SetDlgCtrlID(IdFromRowCol(row, colNew));
- }
- // new panes have been created -- recalculate layout
- for(col = colNew+ 1; col< m_nCols; col++)
- m_pColInfo[col].nIdealSize= m_pColInfo[col- 1].nCurSize;
- m_pColInfo[colNew].nIdealSize= cxNew;
- RecalcLayout();
- }
- voidCSplitterWndEx::HideColumn(int colHide)
- {
- ASSERT_VALID(this);
- ASSERT(m_nCols> 1);
- ASSERT(colHide< m_nCols);
- ASSERT(m_nHidedCol== -1);
- m_nHidedCol = colHide;
- // if the column has an active window -- change it
- int rowActive, colActive;
- if(GetActivePane(&rowActive,&colActive)!= NULL &&
- colActive == colHide)
- {
- if(++colActive >= m_nCols)
- colActive = 0;
- SetActivePane(rowActive, colActive);
- }
- // hide all column panes
- for(int row= 0; row< m_nRows; row++)
- {
- CWnd* pPaneHide= GetPane(row, colHide);
- ASSERT(pPaneHide!= NULL);
- pPaneHide->ShowWindow(SW_HIDE);
- pPaneHide->SetDlgCtrlID(
- AFX_IDW_PANE_FIRST+ row *16 + m_nCols);
- for(int col= colHide +1; col< m_nCols; col++)
- {
- CWnd* pPane= GetPane(row, col);
- ASSERT(pPane!= NULL);
- pPane->SetDlgCtrlID(IdFromRowCol(row, col - 1));
- }
- }
- m_nCols--;
- m_pColInfo[m_nCols].nCurSize= m_pColInfo[colHide].nCurSize;
- RecalcLayout();
- }
- BEGIN_MESSAGE_MAP(CSplitterWndEx,CSplitterWnd)
- //{{AFX_MSG_MAP(CSplitterWndEx)
- // NOTE - the ClassWizard will add and remove mapping macros here.
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()