分享
 
 
 

可以隐藏或显示某视图的CSplitterEx类

王朝vc·作者佚名  2006-02-01
窄屏简体版  字體: |||超大  

可以隐藏或显示某视图的CSplitterEx类

前几天写程序,遇到一个问题。

类似的IE窗口的“历史”或“收藏夹”功能,当点击”历史“以后,会在左边出现一个视图,再点一下,这个视图就关闭(其实是隐藏).

费了半天劲,找到了一个代码,它只能隐藏列,我修改了一下,可以隐藏行了。

//CSplitterEx.h

#pragma

once

// CSplitterEx 框架

class CSplitterEx : public

CSplitterWnd

{

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);

protected:

DECLARE_MESSAGE_MAP()

};

//CSplitterEx.cpp

// CSplitterEx.cpp : 实现文件

//

//呵,加个昵称:头太晕 http://spaces.msn.com/members/headfaint

#include "stdafx.h"

#include "CSplitterEx.h"

// splitterex

IMPLEMENT_DYNCREATE(CSplitterEx, CSplitterWnd)

CSplitterEx::CSplitterEx()

: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);

// 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);

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;

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;

// 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();

}

void CSplitterEx::ShowRowumn(bool bShow)

{

//这个是显示行的, 加个昵称:头太晕 http://spaces.msn.com/members/headfaint

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);

// 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);

for (row = m_nRows - 2; row >= rowNew; row--)

{

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();

}

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;

// 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);

}

// 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 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();

}

// CSplitterEx 消息处理程序

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有