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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? asl_guiobj.cpp

?? 泡泡堂單機版(含ASL游戲引擎源碼 泡泡堂單機版(含ASL游戲引擎源碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
//-----------------------------------------------------------------------------
//
//    ____ Azure Star Game Engine 藍星游戲引擎 ____
//
//    Copyright (c) 2006, 藍星工作室
//    All rights reserved.
//
//    文件名稱: asl_guiobj.cpp
//    摘    要: 各種GUI控件類實現
//
//    當前版本: 1.0
//    作    者: 湯  祺
//    創建日期: 2006-8-12
//
//-----------------------------------------------------------------------------

#include "asl_guiobj.h"
#include "asl_gui.h"

using namespace std;

namespace ASL
{

//-----------------------------------------------------------------------------
// ASLGuiObj類實現
//-----------------------------------------------------------------------------
ASLControl::ASLControl(void)
: m_pParent(NULL)
, m_nLeft(0)
, m_nTop(0)
, m_nWidth(0)
, m_nHeight(0)
, m_bEnabled(true)
, m_bVisible(true)
, m_bFocused(false)
, m_pFont(NULL)
, m_clFontColor(clWhite)
, Tag(0)
{	
}

ASLControl::~ASLControl(void)
{
	if (m_pParent != NULL)
	{
		m_pParent->DelChild(this);
	}
	list<ASLControl*>::iterator it;
	for (it = m_lChildren.begin(); it != m_lChildren.end(); ++it)
	{
		(*it)->m_pParent = NULL;
		GUI.DelCtrl(*it);
	}
	GUI.DelCtrl(this);
}

void ASLControl::Create(void)
{
	GUI.AddCtrl(this);
}

void ASLControl::SetParent(ASLControl *pParent)
{
	if (m_pParent == pParent)
	{
		return;
	}

	if (m_pParent != NULL)
	{
		m_pParent->DelChild(this);
	}

	m_pParent = pParent;
	if (m_pParent != NULL)
	{
		m_pParent->AddChild(this);
		m_pFont = m_pParent->GetFont();
		m_clFontColor = m_pParent->GetFontColor();
	}
}

void ASLControl::AddChild(ASLControl* pChild)
{
	ASSERT(pChild != NULL);

	list<ASLControl*>::iterator it;
	for (it = m_lChildren.begin(); it != m_lChildren.end(); ++it)
	{
		if ((*it) == pChild)
		{
			return;
		}
	}

	m_lChildren.push_back(pChild);
}

void ASLControl::DelChild(ASLControl* pChild)
{
	ASSERT(pChild != NULL);

	list<ASLControl*>::iterator it;
	for (it = m_lChildren.begin(); it != m_lChildren.end(); ++it)
	{
		if ((*it) == pChild)
		{
			m_lChildren.erase(it);
			return;
		}
	}
}

void ASLControl::Enable(void)
{
	m_bEnabled = true;
	list<ASLControl*>::iterator it;
	for (it = m_lChildren.begin(); it != m_lChildren.end(); ++it)
	{
		(*it)->Enable();
	}
}

void ASLControl::Disable(void)
{
	m_bEnabled = false;
	list<ASLControl*>::iterator it;
	for (it = m_lChildren.begin(); it != m_lChildren.end(); ++it)
	{
		(*it)->Disable();
	}	
}

void ASLControl::Show(void)
{
	m_bVisible = true;
	list<ASLControl*>::iterator it;
	for (it = m_lChildren.begin(); it != m_lChildren.end(); ++it)
	{
		(*it)->Show();
	}
}

void ASLControl::Hide(void)
{
	m_bVisible = false;
	list<ASLControl*>::iterator it;
	for (it = m_lChildren.begin(); it != m_lChildren.end(); ++it)
	{
		(*it)->Hide();
	}
}

void ASLControl::ClientToScreen(POINT &pt) const
{
	if (m_pParent != NULL)
	{
		m_pParent->ClientToScreen(pt);
	}
	pt.x += m_nLeft;
	pt.y += m_nTop;
}

void ASLControl::ScreenToClient(POINT &pt) const
{
	if (m_pParent != NULL)
	{
		m_pParent->ScreenToClient(pt);
	}
	pt.x -= m_nLeft;
	pt.y -= m_nTop;
}

bool ASLControl::IsPointIn(POINT pt) const
{
	ScreenToClient(pt);
	if (pt.x >= 0 && pt.x < m_nWidth && pt.y >= 0 && pt.y < m_nHeight)
	{
		return true;
	}
	else
	{
		return false;
	}
}

void ASLControl::SetFocus(void)
{
	if (CanHaveFocus())
	{
		GUI.SetFocus(this);
	}
}

void ASLControl::MouseEnter(void)
{
	if (OnMouseEnter.function != NULL)
	{
		(OnMouseEnter.invoker->*OnMouseEnter.function)();
	}
}

void ASLControl::MouseLeave(void)
{
	if (OnMouseLeave.function != NULL)
	{
		(OnMouseLeave.invoker->*OnMouseLeave.function)();
	}
}

void ASLControl::MouseMove(POINT pt)
{
	if (OnMouseMove.function != NULL)
	{
		ScreenToClient(pt);
		(OnMouseMove.invoker->*OnMouseMove.function)(pt);
	}
}

void ASLControl::MouseDown(POINT pt, MouseButton mb)
{
	if (OnMouseDown.function != NULL)
	{
		ScreenToClient(pt);
		(OnMouseDown.invoker->*OnMouseDown.function)(pt, mb);
	}
}

void ASLControl::MouseUp(POINT pt, MouseButton mb)
{
	if (OnMouseUp.function != NULL)
	{
		ScreenToClient(pt);
		(OnMouseUp.invoker->*OnMouseUp.function)(pt, mb);
	}
}

void ASLControl::KeyDown(DWORD dwKey, ShiftState ss)
{
	if (OnKeyDown.function != NULL)
	{
		(OnKeyDown.invoker->*OnKeyDown.function)(dwKey, ss);
	}
}

void ASLControl::KeyUp(DWORD dwKey, ShiftState ss)
{
	if (OnKeyUp.function != NULL)
	{
		(OnKeyUp.invoker->*OnKeyUp.function)(dwKey, ss);
	}
}

void ASLControl::KeyPress(char cKey)
{
	if (OnKeyPress.function != NULL)
	{
		(OnKeyPress.invoker->*OnKeyPress.function)(cKey);
	}
}

void ASLControl::Enter(void)
{
	m_bFocused = true;
	if (OnEnter.function != NULL)
	{
		(OnEnter.invoker->*OnEnter.function)();
	}
}
	
void ASLControl::Leave(void)
{
	m_bFocused = false;
	if (OnLeave.function != NULL)
	{
		(OnLeave.invoker->*OnLeave.function)();
	}
}

//-----------------------------------------------------------------------------
// ASLWinCtrl類實現
//-----------------------------------------------------------------------------
ASLWinControl::ASLWinControl(void)
: m_pbmBackground(NULL)
{
}

ASLWinControl::~ASLWinControl(void)
{
}

void ASLWinControl::Draw(void) const
{
	if (!m_bVisible || m_pbmBackground == NULL)
	{
		return;
	}

	if (m_pbmBackground->IsAlphaChannel())
	{
		m_pbmBackground->DrawAlphaChannel(GUI.GetCanvas(), m_nLeft, m_nTop);
	}
	else
	{
		m_pbmBackground->Draw(GUI.GetCanvas(), m_nLeft, m_nTop);
	}
}

void ASLWinControl::SetBG(ASLBitmap &bmBackground)
{
	m_pbmBackground = &bmBackground;
}

//-----------------------------------------------------------------------------
// ASLPanel類實現
//-----------------------------------------------------------------------------
void ASLPanel::Create(ASLControl *pParent, int nLeft, int nTop, int nWidth,
					  int nHeight)
{
	ASLControl::Create();
	SetParent(pParent);
	SetLeft(nLeft);
	SetTop(nTop);
	SetWidth(nWidth);
	SetHeight(nHeight);
}

void ASLPanel::Create(ASLControl *pParent, int nLeft, int nTop, 
					  ASLBitmap &bmBackground)
{
	ASLControl::Create();
	SetParent(pParent);
	SetLeft(nLeft);
	SetTop(nTop);
	SetBG(bmBackground);
	SetWidth(bmBackground.GetWidth());
	SetHeight(bmBackground.GetHeight());
}

//-----------------------------------------------------------------------------
// ASLForm類實現
//-----------------------------------------------------------------------------
ASLForm::ASLForm(void) 
: m_bHolding(false)
, m_bMovable(false)
{
}

void ASLForm::Create(ASLControl *pParent, int nLeft, int nTop, int nWidth,
					 int nHeight, ASLFont &fnt, COLOR cl)
{
	ASLControl::Create();
	SetParent(pParent);
	SetLeft(nLeft);
	SetTop(nTop);
	SetWidth(nWidth);
	SetHeight(nHeight);
	SetFont(fnt);
	SetFontColor(cl);
}

void ASLForm::Create(ASLControl *pParent, int nLeft, int nTop,
					 ASLBitmap &bmBackground, ASLFont &fnt, COLOR cl)
{
	ASLControl::Create();
	SetParent(pParent);
	SetLeft(nLeft);
	SetTop(nTop);
	SetBG(bmBackground);
	SetWidth(bmBackground.GetWidth());
	SetHeight(bmBackground.GetHeight());
	SetFont(fnt);
	SetFontColor(cl);
}

void ASLForm::MouseDown(POINT pt, MouseButton mb)
{
	if (!m_bMovable)
	{
		return;
	}

	RECT rcReal;
	rcReal.left = m_rcHot.left + m_nLeft;
	rcReal.top = m_rcHot.top + m_nTop;
	rcReal.right = rcReal.left + m_rcHot.right - m_rcHot.left;
	rcReal.bottom = rcReal.top + m_rcHot.bottom - m_rcHot.top;

	if (mb == mbLeft && PtInRect(&rcReal, pt))
	{
		m_bHolding = true;
		m_ptOffset.x = pt.x - rcReal.left;
		m_ptOffset.y = pt.y - rcReal.top;
	}

	ASLControl::MouseDown(pt, mb);
}

void ASLForm::MouseUp(POINT pt, MouseButton mb)
{
	if (!m_bMovable)
	{
		return;
	}

	if (mb == mbLeft)
	{
		m_bHolding = false;
	}

	ASLControl::MouseUp(pt, mb);
}

void ASLForm::MouseMove(POINT pt)
{
	if (!m_bMovable)
	{
		return;
	}

	if (m_bHolding)
	{
		SetLeft(pt.x - m_ptOffset.x);
		SetTop(pt.y - m_ptOffset.y);
	}

	ASLControl::MouseMove(pt);
}

//-----------------------------------------------------------------------------
// ASLLabel類實現
//-----------------------------------------------------------------------------
void ASLLabel::Create(ASLControl *pParent, int nLeft, int nTop, LPCSTR szCaption)
{
	ASLControl::Create();
	SetParent(pParent);
	SetLeft(nLeft);
	SetTop(nTop);
	SetCaption(szCaption);
}

void ASLLabel::Draw(void) const
{
	if (!m_bVisible || m_pFont == NULL)
	{
		return;
	}

	POINT pt = { 0, 0 };
	ClientToScreen(pt);		
	m_pFont->DrawText(GUI.GetCanvas(), pt.x, pt.y, m_strCaption.c_str(), m_clFontColor);
}

//-----------------------------------------------------------------------------
// ASLImage類實現
//-----------------------------------------------------------------------------
ASLImage::ASLImage(void) 
: m_pbmImage(NULL)
{
}

void ASLImage::Create(ASLControl *pParent, int nLeft, int nTop, ASLBitmap &bmImage)
{
	ASLControl::Create();
	SetParent(pParent);
	SetLeft(nLeft);
	SetTop(nTop);
	SetImage(bmImage);
}

void ASLImage::Draw(void) const
{
	if (m_pbmImage == NULL)
	{
		return;
	}

	POINT pt = { 0, 0 };
	ClientToScreen(pt);

	if (m_pbmImage->IsAlphaChannel())
	{
		m_pbmImage->DrawAlphaChannel(GUI.GetCanvas(), pt.x, pt.y);
	}
	else
	{
		m_pbmImage->Draw(GUI.GetCanvas(), pt.x, pt.y);
	}
}

void ASLImage::SetImage(ASLBitmap &bmImage)
{
	m_pbmImage = &bmImage;
	m_nWidth = m_pbmImage->GetWidth();
	m_nHeight = m_pbmImage->GetHeight();
}

//-----------------------------------------------------------------------------
// ASLPicButton類實現
//-----------------------------------------------------------------------------
ASLPicButton::ASLPicButton(void) 
: m_pbmGlyph(NULL)
, m_bsState(bsUp)
, m_bHolding(false)
, m_bHovering(false)
{
	m_ptDownOffset.x = 0;
	m_ptDownOffset.y = 0;
}

void ASLPicButton::Draw(void) const
{
	if (!m_bVisible || m_pbmGlyph == NULL)
	{
		return;
	}

	POINT pt = { 0, 0 };
	if (m_bsState == bsDown)
	{
		pt.x += m_ptDownOffset.x;
		pt.y += m_ptDownOffset.y;
	}
	ClientToScreen(pt);

	ButtonState bsSeq = m_bsState;
	if (!m_bEnabled)
	{
		bsSeq = bsDisabled;
	}

	if (m_pbmGlyph->IsAlphaChannel())
	{
		m_pbmGlyph->DrawAlphaChannel(GUI.GetCanvas(), pt.x, pt.y, bsSeq);
	}
	else
	{
		m_pbmGlyph->Draw(GUI.GetCanvas(), pt.x, pt.y, bsSeq);
	}
}

void ASLPicButton::SetGlyph(ASLBitmap &bmGlyph)
{
	m_pbmGlyph = &bmGlyph;
	m_nWidth = m_pbmGlyph->GetWidth() / 4;
	m_nHeight = m_pbmGlyph->GetHeight();
	m_pbmGlyph->SetBlock(4, 1);
}

void ASLPicButton::SetDownOffset(int x, int y)
{
	m_ptDownOffset.x = x;
	m_ptDownOffset.y = y;
}

void ASLPicButton::MouseEnter(void)
{
	m_bHovering = true;
	if (m_bHolding)
	{
		m_bsState = bsDown;
	}
	else
	{
		m_bsState = bsHot;
	}

	ASLControl::MouseEnter();
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
男女男精品网站| 91视频在线看| 不卡一区在线观看| 欧美日韩中文字幕一区二区| 欧美一区二区三区日韩视频| 亚洲欧洲无码一区二区三区| 丝袜美腿成人在线| 色婷婷av一区二区三区大白胸| 欧美精品一区二区三区在线播放| 一区二区三区四区五区视频在线观看| 黑人巨大精品欧美一区| 欧美精品亚洲二区| 亚洲午夜私人影院| 一本大道综合伊人精品热热| 国产婷婷色一区二区三区四区| 免费精品视频在线| 在线播放中文字幕一区| 国产精品国产自产拍高清av| 国产成人综合视频| 精品国产乱码久久| 国产一区二区三区最好精华液| 91精品在线观看入口| 亚洲一区二区在线免费观看视频| 波多野结衣中文一区| 中文字幕乱码日本亚洲一区二区| 国产九色精品成人porny| 日韩欧美第一区| 免费一级欧美片在线观看| 欧美一区二区在线看| 奇米777欧美一区二区| 5566中文字幕一区二区电影| 天天影视涩香欲综合网| 欧美日韩一区二区欧美激情| 亚洲一区二区高清| 3atv一区二区三区| 老鸭窝一区二区久久精品| 欧美男女性生活在线直播观看| 亚洲最大成人综合| 欧美日韩国产成人在线91| 日韩精品久久久久久| 欧美一区二区三区思思人| 看国产成人h片视频| 亚洲精品一区二区精华| 成人午夜精品在线| 亚洲日本中文字幕区| 欧美性大战久久久久久久| 偷拍日韩校园综合在线| 欧美一区2区视频在线观看| 精品在线观看免费| 国产人成亚洲第一网站在线播放 | 国产一区二区免费在线| 亚洲欧美一区二区三区极速播放| 97精品久久久午夜一区二区三区| 亚洲欧美经典视频| 欧美另类变人与禽xxxxx| 日本不卡中文字幕| 国产精品卡一卡二卡三| 色婷婷av一区二区三区大白胸| 亚洲成a人v欧美综合天堂下载| 日韩一区二区三区观看| 国产成人av资源| 亚洲精品久久久久久国产精华液| 56国语精品自产拍在线观看| 国产精品影视在线| 亚洲永久免费av| 精品va天堂亚洲国产| 91麻豆国产精品久久| 免费观看在线色综合| 综合欧美一区二区三区| 欧美一级生活片| 99re成人精品视频| 久久av老司机精品网站导航| 国产精品第五页| 日韩精品在线一区| 色婷婷亚洲精品| 韩国精品主播一区二区在线观看| 一区二区三区小说| 中文av一区二区| 欧美一区二区三区系列电影| 97se亚洲国产综合自在线观| 久久精品国产精品亚洲红杏| 夜夜亚洲天天久久| 国产女同性恋一区二区| 日韩欧美中文字幕一区| 欧美影视一区在线| bt欧美亚洲午夜电影天堂| 蜜臀av性久久久久蜜臀aⅴ流畅| 亚洲视频免费在线观看| 欧美国产成人在线| 精品精品国产高清a毛片牛牛| 欧美熟乱第一页| 91视频一区二区三区| 国产真实乱偷精品视频免| 天天操天天综合网| 亚洲午夜视频在线观看| 亚洲特黄一级片| 欧美国产日韩a欧美在线观看| 日韩免费一区二区| 欧美日韩国产123区| 欧美色图天堂网| 色嗨嗨av一区二区三区| 99久久精品国产麻豆演员表| 国产乱码字幕精品高清av | 91精品国产综合久久小美女| 99久久国产免费看| 成人app网站| 成人午夜视频免费看| 国产99久久久精品| 国产精品亚洲一区二区三区在线| 狠狠色综合播放一区二区| 美女任你摸久久| 麻豆成人久久精品二区三区小说| 亚洲第一电影网| 五月激情丁香一区二区三区| 丝袜诱惑制服诱惑色一区在线观看 | 国产精品视频麻豆| 国产精品美女一区二区在线观看| 欧美精品一区二区三区视频 | 欧美日韩一级大片网址| 欧美三级日韩在线| 欧美日韩国产在线播放网站| 欧美老肥妇做.爰bbww| 5858s免费视频成人| 欧美成人精品1314www| 99天天综合性| 91国在线观看| 777久久久精品| 26uuu国产电影一区二区| 国产欧美综合在线| 亚洲人成在线播放网站岛国| 亚洲成人你懂的| 精品一区二区三区免费视频| 国产精品一区二区久久不卡 | 亚洲另类在线制服丝袜| 亚洲激情网站免费观看| 香蕉影视欧美成人| 国内精品在线播放| 播五月开心婷婷综合| 在线观看国产91| 精品久久一区二区| 专区另类欧美日韩| 免费av网站大全久久| 国产成人精品亚洲午夜麻豆| 色综合夜色一区| 日韩欧美二区三区| 最近中文字幕一区二区三区| 午夜久久久久久久久| 国产盗摄一区二区| 欧美偷拍一区二区| 国产亚洲欧美日韩在线一区| 亚洲欧美激情小说另类| 九九视频精品免费| 在线看国产一区二区| 精品国产伦一区二区三区观看方式 | 99国产精品国产精品毛片| 欧美色图激情小说| 国产亚洲制服色| 亚洲综合色噜噜狠狠| 国产在线精品不卡| 欧美人牲a欧美精品| 久久九九影视网| 日本亚洲免费观看| 色偷偷一区二区三区| 久久夜色精品国产欧美乱极品| 一区二区在线观看视频| 国产乱国产乱300精品| 91精品久久久久久久久99蜜臂| 中文在线免费一区三区高中清不卡| 亚洲无线码一区二区三区| 成人av电影免费观看| 欧美精品一区二区三区很污很色的 | 成人精品免费视频| 欧美成人猛片aaaaaaa| 五月综合激情日本mⅴ| 99国产精品久久久| 欧美极品另类videosde| 蜜臀av一区二区三区| 欧美日韩国产高清一区二区| 亚洲欧洲日产国码二区| 国产麻豆精品在线| 日韩一级免费观看| 偷拍与自拍一区| 精品视频一区 二区 三区| 国产精品不卡一区二区三区| 国产精品自在欧美一区| 欧美不卡123| 国内精品自线一区二区三区视频| 欧美群妇大交群中文字幕| 一级做a爱片久久| 97se亚洲国产综合自在线不卡| 国产日韩欧美在线一区| 国产精品99久久久久久宅男| 久久这里只精品最新地址| 免费观看日韩av| 欧美成人精品3d动漫h| 伦理电影国产精品| 精品国产乱码久久久久久1区2区| 日本成人在线视频网站| 欧美一区二区三区在线观看| 日韩和欧美的一区|