可以隐藏或显示某视图的CSplitterEx类
来源:互联网 发布:模拟驾车软件 编辑:程序博客网 时间:2024/05/21 09:46
可以隐藏或显示某视图的CSplitterEx类
// CSplitterEx 框架
// splitterex
BEGIN_MESSAGE_MAP(CSplitterEx, CSplitterWnd)
END_MESSAGE_MAP()
{
//这个是显示所有列的. 加个昵称:头太晕 http://spaces.msn.com/members/headfaint
ASSERT_VALID(this);
ASSERT(m_nCols < m_nMaxCols);
ASSERT(m_nHidedCol != -1);
// CSplitterEx 消息处理程序
前几天写程序,遇到一个问题。
类似的IE窗口的“历史”或“收藏夹”功能,当点击”历史“以后,会在左边出现一个视图,再点一下,这个视图就关闭(其实是隐藏).
类似的IE窗口的“历史”或“收藏夹”功能,当点击”历史“以后,会在左边出现一个视图,再点一下,这个视图就关闭(其实是隐藏).
费了半天劲,找到了一个代码,它只能隐藏列,我修改了一下,可以隐藏行了。
//CSplitterEx.h
#pragma once
//CSplitterEx.h
#pragma once
// CSplitterEx 框架
class CSplitterEx : public CSplitterWnd
{
DECLARE_DYNCREATE(CSplitterEx)
protected:
public:
int m_nHidedCol;
int m_nHidedRow;
CSplitterEx(); // 动态创建所使用的受保护的构造函数
{
DECLARE_DYNCREATE(CSplitterEx)
protected:
public:
int m_nHidedCol;
int m_nHidedRow;
CSplitterEx(); // 动态创建所使用的受保护的构造函数
//呵,加个昵称:头太晕 http://spaces.msn.com/members/headfaint
virtual ~CSplitterEx();
void ShowColumn(bool bShow=false);
void HideColumn(int colHide);
void ShowRowumn(bool bShow=false);
void HideRowumn(int rowHide);
virtual ~CSplitterEx();
void ShowColumn(bool bShow=false);
void HideColumn(int colHide);
void ShowRowumn(bool bShow=false);
void HideRowumn(int rowHide);
protected:
DECLARE_MESSAGE_MAP()
};
DECLARE_MESSAGE_MAP()
};
//CSplitterEx.cpp
// CSplitterEx.cpp : 实现文件
//
//
//呵,加个昵称:头太晕 http://spaces.msn.com/members/headfaint
#include "stdafx.h"
#include "CSplitterEx.h"
#include "CSplitterEx.h"
// splitterex
IMPLEMENT_DYNCREATE(CSplitterEx, CSplitterWnd)
CSplitterEx::CSplitterEx()
:m_nHidedCol(-1),m_nHidedRow(-1)
{
}
:m_nHidedCol(-1),m_nHidedRow(-1)
{
}
CSplitterEx::~CSplitterEx()
{
}
{
}
BEGIN_MESSAGE_MAP(CSplitterEx, CSplitterWnd)
END_MESSAGE_MAP()
void CSplitterEx::ShowColumn(bool bShow)
{
//这个是显示所有列的. 加个昵称:头太晕 http://spaces.msn.com/members/headfaint
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);
m_nHidedCol = -1;
int cxNew = m_pColInfo[m_nCols].nCurSize;
m_nCols++; // add a column
ASSERT(m_nCols == m_nMaxCols);
// fill the hided 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);
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));
}
{
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;
if(bShow)RecalcLayout();
}
for (col = colNew + 1; col < m_nCols; col++)
m_pColInfo[col].nIdealSize = m_pColInfo[col - 1].nCurSize;
m_pColInfo[colNew].nIdealSize = cxNew;
if(bShow)RecalcLayout();
}
void CSplitterEx::HideColumn(int colHide)
{
//这个是隐藏列的, 加个昵称:头太晕 http://spaces.msn.com/members/headfaint
ASSERT_VALID(this);
ASSERT(m_nCols > 1);
ASSERT(colHide < m_nCols);
ASSERT(m_nHidedCol == -1);
m_nHidedCol = colHide;
{
//这个是隐藏列的, 加个昵称:头太晕 http://spaces.msn.com/members/headfaint
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);
}
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 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();
}
{
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();
}
void CSplitterEx::ShowRowumn(bool bShow)
{
{
//这个是显示行的, 加个昵称:头太晕 http://spaces.msn.com/members/headfaint
ASSERT_VALID(this);
ASSERT(m_nRows < m_nMaxRows);
ASSERT(m_nHidedRow != -1);
ASSERT_VALID(this);
ASSERT(m_nRows < m_nMaxRows);
ASSERT(m_nHidedRow != -1);
int rowNew = m_nHidedRow;
m_nHidedRow = -1;
int cxNew = m_pRowInfo[m_nRows].nCurSize;
m_nRows++; // add a column
ASSERT(m_nRows == m_nMaxRows);
m_nHidedRow = -1;
int cxNew = m_pRowInfo[m_nRows].nCurSize;
m_nRows++; // add a column
ASSERT(m_nRows == m_nMaxRows);
// fill the hided rowumn
int row;
for (int col = 0; col < m_nCols; col++)
{
CWnd* pPaneShow = GetDlgItem(
AFX_IDW_PANE_FIRST + col * 16 + m_nRows);
ASSERT(pPaneShow != NULL);
pPaneShow->ShowWindow(SW_SHOWNA);
int row;
for (int col = 0; col < m_nCols; col++)
{
CWnd* pPaneShow = GetDlgItem(
AFX_IDW_PANE_FIRST + col * 16 + m_nRows);
ASSERT(pPaneShow != NULL);
pPaneShow->ShowWindow(SW_SHOWNA);
for (row = m_nRows - 2; row >= rowNew; row--)
{
CWnd* pPane = GetPane(row, col);
ASSERT(pPane != NULL);
pPane->SetDlgCtrlID(IdFromRowCol(row+1, col));
}
{
CWnd* pPane = GetPane(row, col);
ASSERT(pPane != NULL);
pPane->SetDlgCtrlID(IdFromRowCol(row+1, col));
}
pPaneShow->SetDlgCtrlID(IdFromRowCol(rowNew, col));
}
}
// new panes have been created -- recalculate layout
for (row = rowNew + 1; row < m_nRows; row++)
m_pRowInfo[row].nIdealSize = m_pRowInfo[row - 1].nCurSize;
m_pRowInfo[rowNew].nIdealSize = cxNew;
if(bShow) RecalcLayout();
}
for (row = rowNew + 1; row < m_nRows; row++)
m_pRowInfo[row].nIdealSize = m_pRowInfo[row - 1].nCurSize;
m_pRowInfo[rowNew].nIdealSize = cxNew;
if(bShow) RecalcLayout();
}
void CSplitterEx::HideRowumn(int rowHide)
{
{
//这个是隐藏行的, 加个昵称:头太晕 http://spaces.msn.com/members/headfaint
ASSERT_VALID(this);
ASSERT(m_nRows > 1);
ASSERT(rowHide < m_nRows);
ASSERT(m_nHidedRow == -1);
m_nHidedRow = rowHide;
ASSERT_VALID(this);
ASSERT(m_nRows > 1);
ASSERT(rowHide < m_nRows);
ASSERT(m_nHidedRow == -1);
m_nHidedRow = rowHide;
// if the rowumn has an active window -- change it
int rowActive, colActive;
if (GetActivePane(&rowActive, &colActive) != NULL &&
rowActive == rowHide)
{
if (++rowActive >= m_nRows)
rowActive = 0;
SetActivePane(rowActive, colActive);
}
int rowActive, colActive;
if (GetActivePane(&rowActive, &colActive) != NULL &&
rowActive == rowHide)
{
if (++rowActive >= m_nRows)
rowActive = 0;
SetActivePane(rowActive, colActive);
}
// hide all rowumn panes
for (int col = 0; col < m_nCols; col++)
{
CWnd* pPaneHide = GetPane(rowHide, col);
ASSERT(pPaneHide != NULL);
pPaneHide->ShowWindow(SW_HIDE);
pPaneHide->SetDlgCtrlID(
AFX_IDW_PANE_FIRST + col * 16 + m_nRows);
for (int col = 0; col < m_nCols; col++)
{
CWnd* pPaneHide = GetPane(rowHide, col);
ASSERT(pPaneHide != NULL);
pPaneHide->ShowWindow(SW_HIDE);
pPaneHide->SetDlgCtrlID(
AFX_IDW_PANE_FIRST + col * 16 + m_nRows);
for (int row = rowHide + 1; row < m_nRows; row++)
{
CWnd* pPane = GetPane(row, col);
ASSERT(pPane != NULL);
pPane->SetDlgCtrlID(IdFromRowCol(row-1, col));
}
}
m_nRows--;
m_pRowInfo[m_nRows].nCurSize = m_pRowInfo[rowHide].nCurSize;
RecalcLayout();
}
{
CWnd* pPane = GetPane(row, col);
ASSERT(pPane != NULL);
pPane->SetDlgCtrlID(IdFromRowCol(row-1, col));
}
}
m_nRows--;
m_pRowInfo[m_nRows].nCurSize = m_pRowInfo[rowHide].nCurSize;
RecalcLayout();
}
// CSplitterEx 消息处理程序
- 可以隐藏或显示某视图的CSplitterEx类
- Revit二次开发之“显示或隐藏视图中未选中的元素”
- Java乔晓松-android控制显示和隐藏视图或控件的操作
- ViewAnimator控制视图的隐藏与显示
- button控制视图的隐藏与显示
- 可以显示和隐藏密码的EditText
- 窗体的显示、关闭或隐藏问题
- JS显示或隐藏层的函数
- 无法显示隐藏的文件或文件夹
- javascript 控制层的显示或隐藏
- 隐藏或显示iphone的状态条
- Android输入法的显示或隐藏
- easyui的datagrid显示或隐藏列
- Eclipse空白包的显示或隐藏
- Linux 显示隐藏目录或隐藏文件的占用空间
- Mac显示或隐藏默认隐藏的文件
- 显示或隐藏层
- 密码隐藏或显示
- owl-s
- 数据结构---单链表
- 深思,从自然中最基本的存在中获取智慧
- 反-反通过枚举句柄枚举进程
- 华人密码学家Lai Xuejia
- 可以隐藏或显示某视图的CSplitterEx类
- 常用算法设计方法
- Finding the Longest Nondecreasing Subsequence of A Given Sequence:An analysis of dynamic programming
- Cost Minimization for Dynamic Multicast without Rerouting
- GDB调试器使用手册(转载)
- 上周技术关注:.NET和J2EE该相互学习什么
- 酒桌上如何说话?
- 巨酷的打字软件:Typing of the Dead
- [翻译] Effective C++, 3rd Edition, Item 30: 了解 inlining(内联化)的来龙去脉(上)