亚洲欧美第一页_禁久久精品乱码_粉嫩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();
	}

}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
**欧美大码日韩| 久久久久久久久伊人| 亚洲免费观看高清完整版在线| 欧美蜜桃一区二区三区| 亚洲精品成人精品456| 依依成人精品视频| 亚洲午夜激情av| 粉嫩av亚洲一区二区图片| 欧美色综合网站| 中文字幕视频一区二区三区久| 不卡免费追剧大全电视剧网站| 精品国产乱子伦一区| 五月天久久比比资源色| 91在线丨porny丨国产| 国产色91在线| 国产福利精品导航| 精品国产一区a| 国产999精品久久久久久| 日韩理论电影院| av在线不卡网| 国产精品国产三级国产aⅴ原创 | 国产精品一区二区三区乱码| 欧美一区欧美二区| 亚洲国产日韩a在线播放性色| 欧美久久久影院| 婷婷夜色潮精品综合在线| 精品理论电影在线| 国产一区二区中文字幕| 日韩欧美黄色影院| 麻豆精品视频在线观看| 91精品国产综合久久精品麻豆 | 亚洲综合在线电影| 国产伦精一区二区三区| 日韩伦理免费电影| 日韩精品一区二区三区视频| av电影天堂一区二区在线观看| 五月天一区二区三区| 国产视频一区在线观看| 欧美日韩免费观看一区二区三区| 亚洲日本乱码在线观看| 91精品国产综合久久精品app| 国产剧情一区二区| 亚洲h动漫在线| 日韩免费高清av| 91福利视频在线| 日韩av电影一区| 久久精品欧美日韩精品| 欧美日韩高清在线播放| 懂色一区二区三区免费观看| 免播放器亚洲一区| 亚洲精品一区二区三区香蕉 | 国产中文字幕精品| 日本一区二区三级电影在线观看 | av福利精品导航| 久久av中文字幕片| 中文字幕成人网| 欧美三级蜜桃2在线观看| a级精品国产片在线观看| 久久99精品久久久久婷婷| 国产欧美日韩一区二区三区在线观看| 5858s免费视频成人| 色综合一个色综合| 日本伊人色综合网| 一区二区欧美国产| 中文字幕一区免费在线观看| 精品国产sm最大网站| 日韩限制级电影在线观看| 成人午夜激情片| 亚洲一区二区三区视频在线播放| 亚洲欧洲一区二区在线播放| 国产情人综合久久777777| 精品国产凹凸成av人导航| 精品乱码亚洲一区二区不卡| 91麻豆精品国产91久久久久久久久| 色综合激情久久| 精彩视频一区二区三区| 久久精品99国产精品| 美女视频第一区二区三区免费观看网站 | 精品亚洲成a人在线观看| 免费成人av资源网| 久久99国内精品| 国内不卡的二区三区中文字幕| 久久精品国产精品亚洲综合| 国产自产v一区二区三区c| 激情综合色播激情啊| 久久99精品视频| 国产成人免费视频| 成人网页在线观看| 99久久精品免费看| 91香蕉视频污在线| 国产麻豆精品久久一二三| 国产剧情一区二区| 成人午夜免费av| 在线观看国产一区二区| 成人午夜看片网址| eeuss影院一区二区三区| 91免费精品国自产拍在线不卡| 色综合久久久久久久久久久| 91久久国产综合久久| 欧美日韩小视频| 精品国产a毛片| 中文字幕一区二区三| 亚洲国产另类av| 美女脱光内衣内裤视频久久网站 | 青青草国产精品亚洲专区无| 精品一区二区在线看| 成人性生交大片免费看视频在线| 91污在线观看| 91精品国产入口| 国产亚洲欧美色| 亚洲精品亚洲人成人网| 五月天网站亚洲| 国产精品一区2区| 色呦呦国产精品| 欧美一级日韩不卡播放免费| 欧美极品少妇xxxxⅹ高跟鞋| 亚洲香肠在线观看| 国产一区二区剧情av在线| 色婷婷综合激情| 精品久久五月天| 亚洲自拍都市欧美小说| 色婷婷精品大在线视频| 欧美视频在线一区| 久久综合精品国产一区二区三区| 欧美一区欧美二区| 中文幕一区二区三区久久蜜桃| 国产精品日日摸夜夜摸av| 亚洲综合色视频| 国产91精品久久久久久久网曝门| 欧美性猛交一区二区三区精品| 亚洲精品一区在线观看| 一区二区三区在线观看视频| 国内精品久久久久影院薰衣草 | 成人黄色免费短视频| 欧美老女人第四色| 1区2区3区欧美| 国产美女精品人人做人人爽 | 91视频.com| 国产网红主播福利一区二区| 日韩精品一二区| 国产剧情av麻豆香蕉精品| 欧美军同video69gay| 中文字幕一区二区三| 久久99精品国产91久久来源| 在线精品视频小说1| 中文字幕欧美三区| 精品一区二区三区在线观看| 欧美视频在线观看一区| 国产精品国产三级国产aⅴ原创| 蜜臀av性久久久久蜜臀aⅴ| 欧美在线影院一区二区| 中文字幕日韩一区二区| 国产乱色国产精品免费视频| 欧美一区二区三区性视频| 亚洲一二三四在线观看| 99久久精品国产观看| 国产免费久久精品| 国产成人h网站| 久久久99久久| 国产福利一区二区三区| 精品国产91亚洲一区二区三区婷婷| 午夜不卡在线视频| 欧美性生活久久| 一区二区三区在线免费观看| 色激情天天射综合网| 亚洲色图都市小说| 99久久精品一区二区| 日本一区二区久久| 成人av中文字幕| 中文字幕制服丝袜一区二区三区| 不卡av电影在线播放| 国产精品美女www爽爽爽| 成人一区二区视频| 欧美激情综合网| heyzo一本久久综合| 亚洲欧美一区二区三区孕妇| 91精品福利在线| 亚洲福利国产精品| 欧美一区二区三区在线观看| 青青青爽久久午夜综合久久午夜| 日韩欧美黄色影院| 国产又黄又大久久| 国产亚洲婷婷免费| 波多野结衣中文字幕一区| 亚洲乱码中文字幕综合| 欧美午夜精品一区| 三级一区在线视频先锋| 91精品国产综合久久香蕉的特点| 久久99精品国产麻豆婷婷洗澡| 国产亚洲短视频| 色8久久精品久久久久久蜜| 亚洲国产精品麻豆| 日韩精品综合一本久道在线视频| 国产一区二区三区四| 亚洲欧洲日本在线| 欧美三级欧美一级| 国产一区在线看| 亚洲品质自拍视频| 日韩欧美一区电影| 成人sese在线|