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

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

?? rollupctrl.cpp

?? 一個比較完整的酒店管理系統(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();
	}

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久青草青青国产亚洲免观| 日韩精品亚洲一区二区三区免费| 99国产精品久久久| 精品一二线国产| 人人狠狠综合久久亚洲| 亚洲国产美女搞黄色| 中文字幕在线不卡视频| 国产亚洲污的网站| 国产亚洲欧洲997久久综合| 亚洲激情自拍视频| 一区二区三区四区不卡在线 | 麻豆91精品91久久久的内涵| 亚洲成人精品影院| 日韩av中文字幕一区二区| 丝袜美腿亚洲综合| hitomi一区二区三区精品| 92国产精品观看| 久久精品视频免费| 蜜桃一区二区三区在线观看| 在线观看国产91| 欧美日韩激情一区二区三区| 欧美日韩成人一区二区| 一区二区在线免费观看| 成人短视频下载| 99riav久久精品riav| 国产免费成人在线视频| 亚洲欧美在线aaa| 成人午夜av在线| 欧美久久久久久久久久| 日韩一级欧美一级| 久久久www免费人成精品| 久久精品国产亚洲5555| 91亚洲精品乱码久久久久久蜜桃| 日韩一区二区三区精品视频| 日韩中文字幕不卡| 日韩一区二区免费电影| 蜜臀99久久精品久久久久久软件| 91精品国产欧美一区二区18| 久久久久亚洲综合| 久久99国内精品| 久久午夜国产精品| 亚洲一级不卡视频| 高清beeg欧美| 日韩欧美专区在线| 久久精品国产精品亚洲精品| 欧美xxxxx裸体时装秀| 一区二区三区国产| 欧美少妇性性性| 1区2区3区欧美| 91福利资源站| 中文av一区特黄| 轻轻草成人在线| wwwwww.欧美系列| 99riav一区二区三区| 亚州成人在线电影| 日韩欧美精品三级| 丝袜亚洲另类丝袜在线| 欧美大片国产精品| 成人精品一区二区三区中文字幕| 亚洲女与黑人做爰| 国产成人av电影在线| 亚洲精品国产一区二区精华液 | 欧美一区二区三区的| 国产精品亚洲一区二区三区在线| 欧美日韩在线免费视频| 国产精品三级久久久久三级| 91蜜桃在线免费视频| 午夜精品123| 欧美日本在线播放| 国产一区二区三区在线观看精品 | 日本网站在线观看一区二区三区| 精品欧美久久久| 色综合久久天天综合网| 国产精品免费视频网站| 欧美日韩一区二区在线观看| 国产原创一区二区| 亚洲国产欧美日韩另类综合| 国产亚洲视频系列| 在线播放91灌醉迷j高跟美女 | 亚洲va国产va欧美va观看| 久久久无码精品亚洲日韩按摩| 99久久综合国产精品| 蜜臀91精品一区二区三区| 亚洲精品日产精品乱码不卡| 久久网站最新地址| 欧美日韩国产首页| av一区二区三区黑人| 美女在线一区二区| 一级精品视频在线观看宜春院| 久久免费精品国产久精品久久久久| 欧美色中文字幕| youjizz国产精品| 激情五月激情综合网| 欧美激情一区在线| 99久久精品国产一区二区三区| 秋霞电影网一区二区| 亚洲大型综合色站| 1024精品合集| 国产人妖乱国产精品人妖| 欧美一区二区三区啪啪| 欧美亚洲国产怡红院影院| 国产精品亚洲视频| 国产综合久久久久久久久久久久 | 亚洲另类在线制服丝袜| 国产午夜精品一区二区三区视频| 欧美一卡在线观看| 欧美日本韩国一区二区三区视频| 色婷婷综合久久久久中文 | 日韩午夜av一区| 欧美老女人第四色| 欧美日韩成人综合天天影院| 欧美午夜精品理论片a级按摩| 91亚洲精品久久久蜜桃网站| 色综合天天综合狠狠| 亚洲一区二区在线视频| 亚洲精品乱码久久久久久久久| 亚洲欧洲日韩综合一区二区| 国产亚洲1区2区3区| 久久免费视频色| 国产午夜精品一区二区| 欧美极品美女视频| 国产精品成人一区二区艾草 | 欧美精品一区二区三区四区| 91麻豆成人久久精品二区三区| 岛国一区二区在线观看| av高清不卡在线| 91丝袜国产在线播放| 91成人免费电影| 欧美性一区二区| 91精品黄色片免费大全| 日韩三级视频在线看| 2017欧美狠狠色| 中文字幕中文字幕一区二区| 亚洲愉拍自拍另类高清精品| 视频精品一区二区| 久草这里只有精品视频| 成人性视频免费网站| 在线观看成人小视频| 欧美一区二区视频观看视频| 精品成人佐山爱一区二区| 国产精品情趣视频| 亚洲午夜久久久久久久久久久 | 日韩一区二区三区免费看| 国产亚洲成年网址在线观看| 亚洲欧美色一区| 免费一区二区视频| 成人动漫av在线| 宅男噜噜噜66一区二区66| 久久久91精品国产一区二区三区| 最新欧美精品一区二区三区| 亚洲一区二区综合| 国产激情视频一区二区三区欧美| 麻豆精品视频在线| 99精品一区二区| 日韩一区二区在线免费观看| 国产精品色婷婷久久58| 日韩av电影天堂| 99re8在线精品视频免费播放| 91麻豆精品国产91久久久| 久久精品人人爽人人爽| 婷婷综合五月天| 成人动漫中文字幕| 日韩精品一区二区三区视频| 中文字幕在线不卡视频| 久久国产精品99久久人人澡| 在线观看视频欧美| 国产午夜亚洲精品理论片色戒 | 国产成人亚洲综合a∨猫咪 | 91免费国产在线| 久久综合久久鬼色| 亚洲一二三专区| www.av亚洲| 久久九九99视频| 日韩电影免费一区| 一本在线高清不卡dvd| 国产片一区二区| 麻豆高清免费国产一区| 欧洲亚洲国产日韩| 亚洲欧美激情插| 成人高清伦理免费影院在线观看| 精品免费一区二区三区| 亚洲va欧美va人人爽| 91视频在线观看免费| 国产欧美日韩另类视频免费观看| 久草热8精品视频在线观看| 欧美日韩国产三级| 亚洲午夜av在线| 99国产精品视频免费观看| 中文字幕在线不卡视频| 成人免费毛片片v| 久久久国产一区二区三区四区小说 | 免费成人av资源网| 欧美年轻男男videosbes| 一区二区三区免费网站| 99久久伊人精品| 中文字幕一区二区三区四区不卡| 成人影视亚洲图片在线| 国产精品久久久久久久久晋中| 懂色av中文字幕一区二区三区| 国产欧美精品一区aⅴ影院 |