亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? rollupctrl.cpp

?? C++開發(fā)完整酒店管理系統(tǒng)
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
//////////////////////////////////////////////////////////////////////////////
//
// RollupCtrl.cpp
// 
// Code Johann Nadalutti
// Mail: jnadalutti@worldonline.fr
//
//////////////////////////////////////////////////////////////////////////////
//
// This code is free for personal and commercial use, providing this 
// notice remains intact in the source files and all eventual changes are
// clearly marked with comments.
//
// No warrantee of any kind, express or implied, is included with this
// software; use at your own risk, responsibility for damages (if any) to
// anyone resulting from the use of this software rests entirely with the
// user.
//
//////////////////////////////////////////////////////////////////////////////
//
// History
// --------
// #v1.0
//	31/03/01:	Created
//
// #v1.01
//	13/04/01:	Added ScrollToPage() method
//				Added automatic page visibility to ExpandPage() method
//				Added Mousewheel support
//	15/04/01:	Added mouse capture checking on WM_MOUSEMOVE dialog msg
//				Added SetCursor() on Dialog WM_SETCURSOR
//				Added MovePageAt() method
//	17/04/01:	Fixed Group Boxes displayed over Buttons
//	20/04/01:	Added IsPageExpanded() and IsPageExpanded() methods
//				Added PopupMenu
//				Added Button subclassing (now button's focus not drawn)
//
// Note
// -----
//	Dialog box width is
//		RollupCtrlClientRect.Width() - RC_SCROLLBARWIDTH - (RC_GRPBOXINDENT*2)
//
//
// Thanks to
// ----------
// PJ Arends, Ramon Smits, Uwe Keim, Daniel Madden, Do Quyet Tien,
// Ravi Bhavnani, Masaaki Onishi, ...
// and all others users for their comments.
//
/////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////
// CRollupCtrl Includes
#include "stdafx.h"
#include "RollupCtrl.h"

/////////////////////////////////////////////////////////////////////////////
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CRollupCtrl Message Map

BEGIN_MESSAGE_MAP(CRollupCtrl, CWnd)
	//{{AFX_MSG_MAP(CRollupCtrl)
	ON_WM_PAINT()
	ON_WM_SIZE()
	ON_WM_LBUTTONDOWN()
	ON_WM_LBUTTONUP()
	ON_WM_MOUSEMOVE()
	ON_WM_MOUSEWHEEL()
	ON_WM_MOUSEACTIVATE()
	ON_WM_CONTEXTMENU()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CRollupCtrl Implementation

IMPLEMENT_DYNCREATE(CRollupCtrl, CWnd)

//---------------------------------------------------------------------------
// Constructor
//---------------------------------------------------------------------------
CRollupCtrl::CRollupCtrl()
{
	m_strMyClass = AfxRegisterWndClass(
		CS_VREDRAW | CS_HREDRAW,
		(HCURSOR)::LoadCursor(NULL, IDC_ARROW),
		(HBRUSH)COLOR_WINDOW,
		NULL);

	m_nStartYPos = m_nPageHeight = 0;
}

//---------------------------------------------------------------------------
// Destructor
//---------------------------------------------------------------------------
CRollupCtrl::~CRollupCtrl()
{
	//Remove all pages allocations
	for (int i=0; i<m_PageList.GetSize(); i++) {
		if (m_PageList[i]->pwndButton)		delete m_PageList[i]->pwndButton;
		if (m_PageList[i]->pwndGroupBox)	delete m_PageList[i]->pwndGroupBox;

		if (m_PageList[i]->pwndTemplate && m_PageList[i]->bAutoDestroyTpl)	{
			m_PageList[i]->pwndTemplate->DestroyWindow();
			delete m_PageList[i]->pwndTemplate;
		}

		delete m_PageList[i];
	}

}

//---------------------------------------------------------------------------
// Create
//---------------------------------------------------------------------------
BOOL CRollupCtrl::Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID)
{
	return  CWnd::Create(m_strMyClass, "RollupCtrl", dwStyle, rect, pParentWnd, nID);
}


//---------------------------------------------------------------------------
// Function name	: InsertPage
// Description		: Return -1 if an error occurs
//					  Make sure template had WS_CHILD style
//---------------------------------------------------------------------------
int CRollupCtrl::InsertPage(LPCTSTR caption, UINT nIDTemplate, CRuntimeClass* rtc, int idx)
{
	if (idx>0 && idx>=m_PageList.GetSize())		idx=-1;

	//Create Template
	ASSERT(rtc!=NULL);
	CDialog* pwndTemplate = (CDialog*)rtc->CreateObject();
	BOOL b = pwndTemplate->Create(nIDTemplate, this);
	if (!b)	{ delete pwndTemplate; return -1; }

	//Insert Page
	return _InsertPage(caption, pwndTemplate, idx, TRUE);
}


//---------------------------------------------------------------------------
// Function name	: InsertPage
// Description		: return -1 if an error occurs
//					  Make sure template had WS_CHILD style
//---------------------------------------------------------------------------
int CRollupCtrl::InsertPage(LPCTSTR caption, CDialog* pwndTemplate, BOOL bAutoDestroyTpl, int idx)
{
	if (!pwndTemplate)		return -1;

	if (idx>0 && idx>=m_PageList.GetSize())		idx=-1;

	//Insert Page
	return _InsertPage(caption, pwndTemplate, idx, bAutoDestroyTpl);
}


//---------------------------------------------------------------------------
// Function name	: InsertPage
// Description		: Called by InsertPage(...) methods
//					  Return -1 if an error occurs
//					  Make sure template had WS_CHILD style
//---------------------------------------------------------------------------
int CRollupCtrl::_InsertPage(LPCTSTR caption, CDialog* pwndTemplate, int idx, BOOL bAutoDestroyTpl)
{
	ASSERT(pwndTemplate!=NULL);
	ASSERT(pwndTemplate->m_hWnd!=NULL);

 	//Get client rect
	CRect r; GetClientRect(r);

	//Create GroupBox
	CButton* groupbox = new CButton;
	groupbox->Create("", WS_CHILD|BS_GROUPBOX, r, this, 0 );

	//Create Button
	CButton* but = new CButton;
	but->Create(caption, WS_CHILD|BS_AUTOCHECKBOX|BS_PUSHLIKE|BS_FLAT, r, this, 0 ); 

	//Change Button's font
	HFONT hfont= (HFONT)::GetStockObject(DEFAULT_GUI_FONT);
	CFont* font = CFont::FromHandle(hfont);
	but->SetFont(font);

	//Add page at pagelist
	RC_PAGEINFO*	pi = new RC_PAGEINFO;
	pi->bExpanded		= FALSE;
	pi->bEnable			= TRUE;
	pi->pwndTemplate	= pwndTemplate;
	pi->pwndButton		= but;
	pi->pwndGroupBox	= groupbox;
	pi->pOldDlgProc		= (WNDPROC)::GetWindowLong(pwndTemplate->m_hWnd, DWL_DLGPROC);
	pi->pOldButProc		= (WNDPROC)::GetWindowLong(but->m_hWnd, GWL_WNDPROC);
	pi->bAutoDestroyTpl	= bAutoDestroyTpl;

	int newidx;
	if (idx<0)	newidx = m_PageList.Add(pi);
	else	{ m_PageList.InsertAt(idx, pi); newidx=idx; }

	//Set Dlg Window datas
	::SetWindowLong(pwndTemplate->m_hWnd, GWL_USERDATA,	(LONG)m_PageList[newidx]);
	::SetWindowLong(pwndTemplate->m_hWnd, DWL_USER,		(LONG)this);

	//Set But Window data
	::SetWindowLong(but->m_hWnd, GWL_USERDATA,	(LONG)m_PageList[newidx]);

	//SubClass Template window proc
	::SetWindowLong(pwndTemplate->m_hWnd, DWL_DLGPROC, (LONG)CRollupCtrl::DlgWindowProc);

	//SubClass Button window proc
	::SetWindowLong(but->m_hWnd, GWL_WNDPROC, (LONG)CRollupCtrl::ButWindowProc);

	//Update
	m_nPageHeight+=RC_PGBUTTONHEIGHT+(RC_GRPBOXINDENT/2);
	RecalLayout();

	return newidx;
}


//---------------------------------------------------------------------------
// Function name	: RemovePage
// Description		: 
//---------------------------------------------------------------------------
void CRollupCtrl::RemovePage(int idx)
{
	if (idx>=m_PageList.GetSize() || idx<0)				return;

	//Remove
	_RemovePage(idx);

	//Update
	RecalLayout();
}

//---------------------------------------------------------------------------
// Function name	: RemoveAllPages
// Description		:
//---------------------------------------------------------------------------
void CRollupCtrl::RemoveAllPages()
{
	//Remove all
	for (; m_PageList.GetSize();)
		_RemovePage(0);

	//Update
	RecalLayout();
}

//---------------------------------------------------------------------------
// Function name	: _RemovePage
// Description		: Called by RemovePage or RemoveAllPages methods
//---------------------------------------------------------------------------
void CRollupCtrl::_RemovePage(int idx)
{
	RC_PAGEINFO* pi = m_PageList[idx];

	//Get Page Rect
	CRect tr; pi->pwndTemplate->GetWindowRect(&tr);

	//Update PageHeight
	m_nPageHeight-=RC_PGBUTTONHEIGHT+(RC_GRPBOXINDENT/2);
	if (pi->bExpanded)		m_nPageHeight-=tr.Height();

	//Remove wnds
	if (pi->pwndButton)				delete pi->pwndButton;
	if (pi->pwndGroupBox)			delete pi->pwndGroupBox;

	if (pi->pwndTemplate && pi->bAutoDestroyTpl) {
		pi->pwndTemplate->DestroyWindow();
		delete pi->pwndTemplate;
	}

	//Remove page from array
	m_PageList.RemoveAt(idx);

	//Delete pageinfo
	delete pi;
}

//---------------------------------------------------------------------------
// Function name	: ExpandPage
// Description		:
//---------------------------------------------------------------------------
void CRollupCtrl::ExpandPage(int idx, BOOL bExpand)
{
	if (idx>=m_PageList.GetSize() || idx<0)				return;

	//Expand-collapse
	_ExpandPage(m_PageList[idx], bExpand);

	//Update
	RecalLayout();

	//Scroll to this page (Automatic page visibility)
	if (bExpand)	ScrollToPage(idx, FALSE);

}

//---------------------------------------------------------------------------
// Function name	: ExpandAllPages
// Description		: 
//---------------------------------------------------------------------------
void CRollupCtrl::ExpandAllPages(BOOL bExpand)
{
	//Expand-collapse All
	for (int i=0; i<m_PageList.GetSize(); i++)
		_ExpandPage(m_PageList[i], bExpand);

	//Update
	RecalLayout();
}

//---------------------------------------------------------------------------
// Function name	: _ExpandPage
// Description		: Called by ExpandPage or ExpandAllPages methods
//---------------------------------------------------------------------------
void	CRollupCtrl::_ExpandPage(RC_PAGEINFO* pi, BOOL bExpand)
{
	//Check if we need to change state
	if (pi->bExpanded==bExpand)					return;
	if (!pi->bEnable)							return;

	//Get Page Rect
	CRect tr; pi->pwndTemplate->GetWindowRect(&tr);

	//Expand-collapse
	pi->bExpanded = bExpand;

	if (bExpand)	m_nPageHeight+=tr.Height();
	else			m_nPageHeight-=tr.Height();

}


//---------------------------------------------------------------------------
// Function name	: EnablePage
// Description		: 
//---------------------------------------------------------------------------
void CRollupCtrl::EnablePage(int idx, BOOL bEnable)
{
	if (idx>=m_PageList.GetSize() || idx<0)		return;

	//Enable-Disable
	_EnablePage(m_PageList[idx], bEnable);

	//Update
	RecalLayout();
}


//---------------------------------------------------------------------------
// Function name	: EnableAllPages
// Description		: 
//---------------------------------------------------------------------------
void CRollupCtrl::EnableAllPages(BOOL bEnable)
{
	//Enable-disable All
	for (int i=0; i<m_PageList.GetSize(); i++)
		_EnablePage(m_PageList[i], bEnable);

	//Update
	RecalLayout();
}

//---------------------------------------------------------------------------
// Function name	: _EnablePage
// Description		: Called by EnablePage or EnableAllPages methods
//---------------------------------------------------------------------------
void CRollupCtrl::_EnablePage(RC_PAGEINFO* pi, BOOL bEnable)
{
	//Check if we need to change state
	if (pi->bEnable==bEnable)		return;

	//Get Page Rect
	CRect tr; pi->pwndTemplate->GetWindowRect(&tr);

	//Change state
	pi->bEnable = bEnable;

	if (pi->bExpanded)	{ m_nPageHeight-=tr.Height(); pi->bExpanded=FALSE; }
}


//---------------------------------------------------------------------------
// Function name	: ScrollToPage
// Description		: Scroll a page at the top of the RollupCtrl if bAtTheTop=TRUE
//					  or just ensure page visibility into view if bAtTheTop=FALSE
//---------------------------------------------------------------------------
void CRollupCtrl::ScrollToPage(int idx, BOOL bAtTheTop)
{
	if (idx>=m_PageList.GetSize() || idx<0)				return;

	//Get page infos
	RC_PAGEINFO* pi = m_PageList[idx];

	//Get windows rect
	CRect r; GetWindowRect(&r);
	CRect tr; pi->pwndTemplate->GetWindowRect(&tr);

	//Check page visibility
	if (bAtTheTop || ((tr.bottom>r.bottom) || (tr.top<r.top)))
	{
		//Compute new m_nStartYPos
		pi->pwndButton->GetWindowRect(&tr);
		m_nStartYPos-= (tr.top-r.top);

		//Update
		RecalLayout();
	}

}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久免费看| 欧美高清hd18日本| 成人污污视频在线观看| 亚洲一区二区免费视频| 欧美成人精精品一区二区频| av综合在线播放| 久久精品久久99精品久久| 亚洲色图另类专区| 26uuu精品一区二区| 欧美色偷偷大香| 99在线精品观看| 国产美女精品人人做人人爽| 日韩一区二区三区电影| 国产精品美女久久久久av爽李琼| 欧美色综合久久| 成年人国产精品| 国产一区在线视频| 日韩电影在线免费| 一区二区三区成人| 亚洲精品中文在线观看| 中文乱码免费一区二区| 国产三级欧美三级| 日韩免费高清av| 日韩一区二区电影网| 欧美日韩不卡视频| 欧美性极品少妇| 色www精品视频在线观看| heyzo一本久久综合| 福利一区二区在线观看| 国产91精品露脸国语对白| 麻豆国产精品一区二区三区| 日韩和欧美的一区| 午夜一区二区三区视频| 亚洲成国产人片在线观看| 一区二区三区在线观看动漫| 欧美日韩精品久久久| 欧美午夜宅男影院| 欧美日韩不卡在线| 日韩一本二本av| 日韩欧美电影在线| 日本成人中文字幕| 奇米亚洲午夜久久精品| 日本不卡中文字幕| 久久国产免费看| 九九国产精品视频| 国产成人午夜片在线观看高清观看| 久久精品国产亚洲a| 国产美女在线观看一区| 懂色av一区二区夜夜嗨| 99精品国产91久久久久久| 91麻豆国产福利在线观看| 日本精品裸体写真集在线观看 | 日韩免费高清av| 精品噜噜噜噜久久久久久久久试看| 欧美一区永久视频免费观看| 日韩久久免费av| 国产精品天天摸av网| 亚洲一区二区三区三| 丝袜亚洲另类丝袜在线| 九色|91porny| 国产成人av电影在线观看| 91丨九色丨黑人外教| 欧美日韩精品欧美日韩精品一 | 91女厕偷拍女厕偷拍高清| 在线免费不卡视频| 欧美精品色一区二区三区| 久久综合九色欧美综合狠狠| 国产精品美日韩| 亚洲成av人片| 国产成人自拍网| 91丝袜呻吟高潮美腿白嫩在线观看| 色哦色哦哦色天天综合| 91精品免费观看| 国产精品婷婷午夜在线观看| 亚洲一区二区三区四区的| 精品一区二区三区视频| 91香蕉视频mp4| 日韩视频一区二区三区| 日韩美女啊v在线免费观看| 舔着乳尖日韩一区| 国产成人免费在线观看| 欧美视频第二页| 国产亚洲综合在线| 亚洲成va人在线观看| 国产精品99久久久久| 欧美日韩一区中文字幕| 欧美精彩视频一区二区三区| 五月天激情综合| 99久久er热在这里只有精品66| 欧美一区二区三区四区高清 | 热久久久久久久| 成人精品视频一区二区三区| 欧美老人xxxx18| 亚洲欧美日韩国产手机在线 | 日韩欧美一级二级三级久久久| 欧美激情在线一区二区三区| 日韩国产在线观看| 91一区在线观看| 国产欧美一区二区精品仙草咪| 午夜影院在线观看欧美| 99国产精品一区| 26uuu亚洲综合色| 婷婷综合在线观看| 91网站在线播放| 国产欧美精品国产国产专区| 人禽交欧美网站| 欧美日韩在线免费视频| 中文字幕一区二区三区在线观看| 国产制服丝袜一区| 欧美一区二区大片| 亚洲成人av电影在线| 色综合久久久久综合| 国产亲近乱来精品视频| 久久精品国产一区二区三| 欧美精品丝袜中出| 亚洲一级二级在线| 日本精品免费观看高清观看| 综合久久久久久| 丰满白嫩尤物一区二区| 久久久综合激的五月天| 久久精品免费观看| 日韩午夜电影av| 欧美三级电影网站| 亚洲欧美激情一区二区| 国产一区二区不卡| 7777精品伊人久久久大香线蕉的| 亚洲日穴在线视频| 成人免费视频一区| 久久久久久久久久电影| 久久国产生活片100| 日韩三级.com| 日韩成人精品在线| 欧美一级生活片| 日本免费在线视频不卡一不卡二| 欧美午夜理伦三级在线观看| 亚洲激情网站免费观看| 色婷婷综合久久久久中文 | 91精品视频网| 日韩国产精品大片| 91精品国产综合久久精品性色| 日韩黄色免费网站| 日韩精品一区二| 国内精品久久久久影院一蜜桃| 精品久久人人做人人爽| 国产精品1区2区| 国产精品久久毛片a| 色网综合在线观看| 偷拍自拍另类欧美| 国产精品久久久久久久久图文区 | 亚洲国产日韩a在线播放性色| 欧美在线播放高清精品| 偷拍一区二区三区| 日韩欧美一区二区三区在线| 国产麻豆一精品一av一免费 | 国产亚洲欧美一级| 波多野结衣在线一区| 亚洲欧洲日韩女同| 欧美视频在线观看一区二区| 日韩av电影免费观看高清完整版| 精品国精品自拍自在线| 国产成人免费视频一区| 亚洲乱码中文字幕综合| 欧美日韩电影在线播放| 国产一区二区三区精品欧美日韩一区二区三区 | 成人久久18免费网站麻豆| 成人免费在线播放视频| 欧美日韩亚洲高清一区二区| 极品少妇xxxx偷拍精品少妇| 国产精品嫩草久久久久| 欧美色国产精品| 韩国一区二区三区| 亚洲男人的天堂在线aⅴ视频| 欧美精品vⅰdeose4hd| 丰满少妇久久久久久久| 午夜视频一区在线观看| 国产亚洲短视频| 欧美日韩国产乱码电影| 国产91综合一区在线观看| 亚洲已满18点击进入久久| 精品卡一卡二卡三卡四在线| 97se亚洲国产综合自在线观| 日本va欧美va精品| 国产精品久久久久久久久晋中| 欧美日韩国产色站一区二区三区| 国产乱一区二区| 日日摸夜夜添夜夜添亚洲女人| 国产视频一区二区在线| 91麻豆精品91久久久久久清纯| 成人午夜视频在线| 日韩不卡在线观看日韩不卡视频| 国产精品色婷婷久久58| 日韩欧美激情一区| 色94色欧美sute亚洲线路一久| 国产在线视频精品一区| 视频一区二区三区在线| 亚洲欧美韩国综合色| 久久精品一区四区| 欧美一二三四区在线| 色美美综合视频| 成人福利视频在线看|