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

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

?? haictrl.c

?? HGui4.1.rar
?? C
?? 第 1 頁 / 共 5 頁
字號:
//---------------------------------------------------------------------------------
// Copyright (c) Haisoft 2006-9-1
// Copyright jinhailiao 2008-2010
// E-mail:   jinhailiao@163.com
// Project:			HGui
// File:			haictrl.c
// Description:		
//-------------------------------------------------------------
// Reversion Histroy:
//-------------------------------------------------------------
// Version		date		operations				by who
// 2.0.0		2006-12-24  create                  Kingsea
// 3.0.0		2008-03-01	update					Kingsea
//---------------------------------------------------------------------------------

#include "haitype.h"
#include "haihandle.h"
#include "_haictrl.h"
#include "haictrl.h"
#include "_haiscene.h"
#include "haiscene.h"
#include "_haigdi.h"
#include "haigdi.h"
#include "haimem.h"
#include "hailib.h"
#include "haigui.h"
#include "virkey.h"
#include "haitime.h"
#include "haicaret.h"
#include "bmpicon.h"

static SH_CTRL pCtrlCapture = S_NULL;


Hai_CtrlProc *hai_GetCtrlTypeProc(S_BYTE CtrlType);

S_VOID _hai_InitCtrlSystem(S_VOID)
{
	pCtrlCapture = S_NULL;
}

SH_CTRL hai_SetCapture(SH_CTRL hCtrl)
{
	SH_CTRL pPrevCapture = pCtrlCapture;

	if (hCtrl)
		pCtrlCapture = hCtrl;

	return pPrevCapture;
}

S_BOOL hai_ReleaseCapture(S_VOID)
{
	if (pCtrlCapture)
	{
		pCtrlCapture = S_NULL;
		return S_TRUE;
	}
	else
		return S_FALSE;
}

SH_CTRL hai_CreateCtrl(S_BYTE CtrlType, S_BYTE CtrlID, S_DWORD style, S_SHORT x, S_SHORT y, S_SHORT w, S_SHORT h)
{
	SP_CTRL pCtrl;
	SP_CTRL pListHead, pListEnd;

	if (!(CtrlType > CT_START && CtrlType < CT_END) || !CtrlID)
		return S_NULL;
	if (x < 0 || y < 0 || x >= LCD_WIDTH || y >= LCD_HEIGHT)
		return S_NULL;
	if (w < 0 || h < 0 || w > LCD_WIDTH || h > LCD_HEIGHT)
		return S_NULL;

	pCtrl = hai_MemAlloc(sizeof(S_CTRL));
	if (!pCtrl)
		return S_NULL;
	memset(pCtrl, 0x00, sizeof(S_CTRL));

	HAI_SETHDLTYPE(pCtrl, HT_CTRL);
	pListHead = hai_GetCurSceneCtrlListHead();
	pListEnd  = hai_GetCurSceneCtrlListEnd();
	if (pListEnd)
	{
		pCtrl->prev = S_NULL;
		pListHead->prev = pCtrl;
	}
	else
	{
		pCtrl->prev = S_NULL;
		pListEnd    = pCtrl;
		hai_SetCurSceneCtrlListEnd(pListEnd);
	}
	pCtrl->next = pListHead;
	pListHead   = pCtrl;
	hai_SetCurSceneCtrlListHead(pListHead);

	pCtrl->CtrlType = CtrlType;
	pCtrl->CtrlID   = CtrlID;
	pCtrl->visible  = !!(style & CS_VISIBLE);
	pCtrl->grayed   = !!(style & CS_GRAYED);
	pCtrl->style    = style & CS_STYLE_MASK;
	pCtrl->x = x;
	pCtrl->y = y;
	pCtrl->w = w;
	pCtrl->h = h;
	if (style & CS_GROUP_FLAG)
	{
		if (pCtrl->prev)
			pCtrl->group = (pCtrl->prev)->group + 1;
		else
			pCtrl->group = 0;
	}
	else
	{
		if (pCtrl->prev)
			pCtrl->group = (pCtrl->prev)->group;
		else
			pCtrl->group = 0;
	}
	pCtrl->CtrlProc = hai_GetCtrlTypeProc(CtrlType);

	return (SH_CTRL)pCtrl;
}

S_BOOL _hai_DestroyCtrl(SH_CTRL hCtrl, S_BYTE bShow)
{
	SP_CTRL pCtrl = (SP_CTRL)hCtrl;
	SP_CTRL pListHead, pListEnd;

	if (!hCtrl || HAI_GETHDLTYPE(hCtrl) != HT_CTRL)
		return S_FALSE;
	if (hai_SetCapture(S_NULL) == hCtrl)
		hai_ReleaseCapture();

	pListHead = hai_GetCurSceneCtrlListHead();
	pListEnd  = hai_GetCurSceneCtrlListEnd();
	if (pCtrl->next)
	{
		if (pCtrl->prev)
			pCtrl->prev->next = pCtrl->next;
		else
		{
			pListHead = pCtrl->next;
			pListHead->prev = S_NULL;
			hai_SetCurSceneCtrlListHead(pListHead);
		}
	}
	else
	{
		pListEnd = pCtrl->prev;
		if (pListEnd)
			pListEnd->next = S_NULL;
		hai_SetCurSceneCtrlListEnd(pListEnd);
	}
	if (pCtrl->prev)
	{
		if (pCtrl->next)
			pCtrl->next->prev = pCtrl->prev;
		else
		{
			pListEnd = pCtrl->prev;
			pListEnd->next = S_NULL;
			hai_SetCurSceneCtrlListEnd(pListEnd);
		}
	}
	else
	{
		pListHead = pCtrl->next;
		if (pListHead)
			pListHead->prev = S_NULL;
		hai_SetCurSceneCtrlListHead(pListHead);
	}

	pCtrl->CtrlProc((SH_CTRL)pCtrl, EVT_DESTROY, 0, 0);
	switch (pCtrl->CtrlType)
	{
	case CT_BUTTON:
		if (pCtrl->ButtonData.pText)
			hai_MemFree(pCtrl->ButtonData.pText);
		break;
	case CT_STATIC:
		if (pCtrl->StaticData.pText)
			hai_MemFree(pCtrl->StaticData.pText);
		break;
	case CT_EDITBOX:
		if (pCtrl->EditBoxData.pText)
			hai_MemFree(pCtrl->EditBoxData.pText);
	default:
		break;
	}

	if (bShow && !hai_IsNeedRedraw())
	{
		S_WORD x, y;
		hai_GetSceneRect(&x, &y, S_NULL, S_NULL);
		hai_InvalidRectEx((S_WORD)(x+pCtrl->x), (S_WORD)(y+pCtrl->y), pCtrl->w, pCtrl->h);
	}
	hai_MemFree(pCtrl);

	return S_TRUE;
}

S_BOOL hai_DestroyCtrl(SH_CTRL hCtrl)
{
	return _hai_DestroyCtrl(hCtrl, S_TRUE);
}

S_BOOL _hai_DestroyAllCtrl(S_BYTE bShow)
{
	S_WORD x, y;
	SP_CTRL pListHead;

	hai_GetSceneRect(&x, &y, S_NULL, S_NULL);
	
	pListHead = hai_GetCurSceneCtrlListHead();
	if (!pListHead)
		return S_FALSE;

	while (pListHead)
	{
		if (bShow)
			_hai_SetInvalidRectEx((S_WORD)(x+pListHead->x), (S_WORD)(y+pListHead->y), pListHead->w, pListHead->h);
		_hai_DestroyCtrl((SH_CTRL)pListHead, bShow);
		pListHead = hai_GetCurSceneCtrlListHead();
	}

	if (bShow)
		hai_SendEvent(EVT_PAINT, 0, 0);
	
	return S_TRUE;
}

S_BOOL hai_DestroyAllCtrl(S_VOID)
{
	return _hai_DestroyAllCtrl(S_TRUE);
}

S_BOOL hai_ShowCtrl(SH_CTRL hCtrl, S_BOOL bShow)
{
	if (!hCtrl || ((SP_CTRL)hCtrl)->visible == bShow)
		return S_FALSE;

	((SP_CTRL)hCtrl)->visible = bShow;
	if (!hai_IsNeedRedraw())
		((SP_CTRL)hCtrl)->CtrlProc(hCtrl, EVT_PAINT, 0, 0);

	return S_TRUE;
}

S_BOOL hai_ShowAllCtrl(S_VOID)
{
	SP_CTRL pCtrl;

	pCtrl = hai_GetCurSceneCtrlListHead();
	if (!pCtrl)
		return S_FALSE;

	while (pCtrl)
	{
		if (pCtrl->visible != 1)
		{
			pCtrl->visible = 1;
			if (!hai_IsNeedRedraw())
				pCtrl->CtrlProc((SH_CTRL)pCtrl, EVT_PAINT, 0, 0);
		}
		pCtrl = pCtrl->next;
	}

	return S_TRUE;
}

S_BOOL hai_EnableCtrl(SH_CTRL hCtrl, S_BOOL bEnable)
{
	if (!hCtrl)
		return S_FALSE;
	if (_AlwaysGrayCtrl((SP_CTRL)hCtrl))
		return S_FALSE;
	
	if (((SP_CTRL)hCtrl)->grayed == (S_UINT)(!bEnable))
		return S_FALSE;

	((SP_CTRL)hCtrl)->grayed = !bEnable;
	((SP_CTRL)hCtrl)->CtrlProc(hCtrl, EVT_PAINT, 0, 0);

	return S_TRUE;
}

SH_CTRL hai_GetCurSceneCtrl(S_BYTE ID)
{
	SP_CTRL pCtrl;

	pCtrl = hai_GetCurSceneCtrlListHead();
	while (pCtrl)
	{
		if (pCtrl->CtrlID == ID)
			break;
		pCtrl = pCtrl->next;
	}

	return (SH_CTRL)pCtrl;
}

S_BYTE hai_GetCurSceneCtrlID(SH_CTRL hCtrl)
{
	if (!hCtrl)
		return 0;
	return ((SP_CTRL)hCtrl)->CtrlID;
}

SH_CTRL hai_GetSpecifiedCtrl(S_SHORT x, S_SHORT y)
{
	SP_CTRL pCtrl = hai_GetCurSceneCtrlListHead();

	while (pCtrl)
	{
		if (pCtrl->visible && !pCtrl->grayed)
			if (x>pCtrl->x && x<pCtrl->x+pCtrl->w && y>pCtrl->y && y<pCtrl->y+pCtrl->h)
				break;
		pCtrl = pCtrl->next;
	}

	return (SH_CTRL)pCtrl;
}

S_BOOL _hai_SetNextFocusCtrl(S_VOID)
{
	SP_CTRL pCtrl, pOldFocusCtrl = S_NULL;

	pCtrl = hai_GetCurSceneCtrlListEnd();
	if (!pCtrl)
		return S_FALSE;

	while (pCtrl) //found current focus ctrl
	{
		if (pCtrl->focus)
		{
			pOldFocusCtrl = pCtrl;
			break;
		}
		pCtrl = pCtrl->prev;
	}

	if (pCtrl)//current focus at ctrl
	{
		pCtrl = pCtrl->prev;
		while (pCtrl)
		{
			if (pCtrl->visible && !pCtrl->grayed && !_CantCtrlGetFocus(pCtrl))
				break;
			pCtrl = pCtrl->prev;
		}
	}
	else //current focus at scene
	{
		pCtrl = hai_GetCurSceneCtrlListEnd();
		while (pCtrl)
		{
			if (pCtrl->visible && !pCtrl->grayed && !_CantCtrlGetFocus(pCtrl))
				break;
			pCtrl = pCtrl->prev;
		}
	}

	if (pCtrl)
	{
		pCtrl->focus = 1;
		if (pOldFocusCtrl)
		{
			pOldFocusCtrl->focus = 0;
			pOldFocusCtrl->CtrlProc((SH_CTRL)pOldFocusCtrl, EVT_FOCUS, (WPARAM)HAI_COMBWORD(HG_KILLFOCUS, pCtrl->CtrlID), 0);
			pOldFocusCtrl->CtrlProc((SH_CTRL)pOldFocusCtrl, EVT_PAINT, 0, 0);
			pCtrl->CtrlProc((SH_CTRL)pCtrl, EVT_FOCUS, (WPARAM)HAI_COMBWORD(HG_GETFOCUS, pOldFocusCtrl->CtrlID), 0);
		}
		else
		{
			hai_SendEvent(EVT_FOCUS, (WPARAM)HAI_COMBWORD(HG_KILLFOCUS, pCtrl->CtrlID), 0);
			pCtrl->CtrlProc((SH_CTRL)pCtrl, EVT_FOCUS, (WPARAM)HAI_COMBWORD(HG_GETFOCUS, SCENE_FOCUS), 0);
		}
		pCtrl->CtrlProc((SH_CTRL)pCtrl, EVT_PAINT, 0, 0);
	}
	else
	{
		if (pOldFocusCtrl)
		{
			pOldFocusCtrl->focus = 0;
			pOldFocusCtrl->CtrlProc((SH_CTRL)pOldFocusCtrl, EVT_FOCUS, (WPARAM)HAI_COMBWORD(HG_KILLFOCUS, SCENE_FOCUS), 0);
			pOldFocusCtrl->CtrlProc((SH_CTRL)pOldFocusCtrl, EVT_PAINT, 0, 0);
			hai_SendEvent(EVT_FOCUS, (WPARAM)HAI_COMBWORD(HG_GETFOCUS, pOldFocusCtrl->CtrlID), 0);
		}
	}
	return S_TRUE;
}

SH_CTRL hai_GetCurSceneFocusCtrl(S_VOID)
{
	SP_CTRL pCtrl;

	pCtrl = hai_GetCurSceneCtrlListHead();
	while (pCtrl)
	{
		if (pCtrl->focus)
			break;
		pCtrl = pCtrl->next;
	}
	return (SH_CTRL)pCtrl;
}

S_BOOL _hai_SetFocusCtrl(SH_CTRL hCtrl, S_BOOL draw)
{
	SP_CTRL pCtrl = (SP_CTRL)hCtrl;

	if (!hCtrl || !pCtrl->visible || pCtrl->grayed)
		return S_FALSE;
	if (_CantCtrlGetFocus(pCtrl))
		return S_FALSE;

	pCtrl = hai_GetCurSceneCtrlListHead();
	while (pCtrl)
	{
		if (pCtrl->focus)
		{
			if (pCtrl == (SP_CTRL)hCtrl)
				return S_TRUE;
			else
				break;
		}
		pCtrl = pCtrl->next;
	}

	((SP_CTRL)hCtrl)->focus = 1;
	if (pCtrl)
	{
		pCtrl->focus = 0;
		pCtrl->CtrlProc((SH_CTRL)pCtrl, EVT_FOCUS, (WPARAM)HAI_COMBWORD(HG_KILLFOCUS, ((SP_CTRL)hCtrl)->CtrlID), 0);
		pCtrl->CtrlProc((SH_CTRL)pCtrl, EVT_PAINT, 0, 0);
		((SP_CTRL)hCtrl)->CtrlProc(hCtrl, EVT_FOCUS, (WPARAM)HAI_COMBWORD(HG_GETFOCUS, pCtrl->CtrlID), 0);
	}
	else
	{
		hai_SendEvent(EVT_FOCUS, (WPARAM)HAI_COMBWORD(HG_KILLFOCUS, ((SP_CTRL)hCtrl)->CtrlID), 0);
		((SP_CTRL)hCtrl)->CtrlProc(hCtrl, EVT_FOCUS, (WPARAM)HAI_COMBWORD(HG_GETFOCUS, SCENE_FOCUS), 0);
	}
	
	if (draw)
		((SP_CTRL)hCtrl)->CtrlProc(hCtrl, EVT_PAINT, 0, 0);
	

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色天天综合久久久久综合片| 亚洲精品一线二线三线| 欧美日韩免费电影| 久久天天做天天爱综合色| 亚洲精品欧美激情| 国产自产高清不卡| 欧美精品在线视频| 自拍偷在线精品自拍偷无码专区| 麻豆高清免费国产一区| 欧美在线制服丝袜| 中文字幕一区二区三区乱码在线| 蜜臀国产一区二区三区在线播放 | 日韩一卡二卡三卡| 亚洲精品美国一| 大胆欧美人体老妇| 精品处破学生在线二十三| 亚洲一区二区三区中文字幕在线| 不卡一卡二卡三乱码免费网站| 精品精品欲导航| 日本大胆欧美人术艺术动态| 色综合视频在线观看| 国产精品色眯眯| 国产在线不卡一区| 精品噜噜噜噜久久久久久久久试看| 亚洲综合另类小说| 在线欧美日韩国产| 亚洲欧美综合色| 成人深夜福利app| 国产欧美日韩在线观看| 国产成人综合精品三级| 久久蜜臀中文字幕| 国产电影一区二区三区| 久久精品亚洲精品国产欧美kt∨ | 91麻豆精品国产91久久久资源速度| 亚洲蜜臀av乱码久久精品蜜桃| av不卡在线播放| 中文字幕在线一区二区三区| 成人精品免费看| 国产精品白丝在线| 色婷婷av一区二区三区之一色屋| 亚洲精品视频在线看| 欧美专区在线观看一区| 一区二区三区美女视频| 欧美日韩欧美一区二区| 日本伊人精品一区二区三区观看方式| 欧洲精品视频在线观看| 午夜视黄欧洲亚洲| 91精品国产色综合久久不卡电影| 男女男精品网站| 久久影视一区二区| 99久久精品情趣| 一区二区三区不卡在线观看| 3atv一区二区三区| 国产呦精品一区二区三区网站| 久久亚洲免费视频| 91在线精品秘密一区二区| 亚洲国产你懂的| 日韩欧美一级二级三级| 国产**成人网毛片九色| 国产精品毛片高清在线完整版| 日本道精品一区二区三区| 丝袜亚洲另类欧美综合| 久久久精品一品道一区| 色婷婷久久久综合中文字幕| 日韩精品电影在线| 国产婷婷色一区二区三区| 99精品欧美一区| 日韩高清不卡一区| 国产精品婷婷午夜在线观看| 欧美少妇bbb| 国产东北露脸精品视频| 亚洲高清免费视频| 国产女人aaa级久久久级 | 国产iv一区二区三区| 亚洲一区二区不卡免费| 精品福利av导航| 色综合久久久久综合体桃花网| 青青草国产精品97视觉盛宴 | 亚洲美女在线一区| 欧美va在线播放| 在线观看免费视频综合| 欧美午夜精品电影| 激情文学综合插| 五月天视频一区| 国产三级久久久| 日韩一区二区三免费高清| 91在线高清观看| 激情综合色丁香一区二区| 亚洲国产日韩一区二区| 中文字幕亚洲精品在线观看| 欧美第一区第二区| 欧美精品日韩一本| 91成人看片片| 国产999精品久久| 麻豆精品在线看| 视频一区二区三区中文字幕| 一区二区三区在线观看网站| 久久精品水蜜桃av综合天堂| 日韩欧美一级精品久久| 欧美欧美欧美欧美| 欧美手机在线视频| 一本到不卡精品视频在线观看| 国产成人免费视频网站高清观看视频| 肉丝袜脚交视频一区二区| 亚洲一区二区影院| 亚洲日本va在线观看| 国产精品福利电影一区二区三区四区| 欧美成人bangbros| 日韩一区二区三区四区| 91精品国产一区二区三区香蕉| 欧美在线看片a免费观看| 久久精品亚洲乱码伦伦中文 | 五月综合激情网| 一区二区三区成人在线视频| 亚洲女与黑人做爰| 亚洲美女偷拍久久| 亚洲综合色自拍一区| 性做久久久久久免费观看| 亚洲综合丝袜美腿| 亚洲成人免费电影| 日本特黄久久久高潮| 日本不卡视频在线| 麻豆专区一区二区三区四区五区| 日韩成人av影视| 免费人成精品欧美精品| 久久99久久久久| 狠狠网亚洲精品| 国产成人免费视频一区| 国产成人av一区| 97精品国产露脸对白| 色乱码一区二区三区88| 欧美中文字幕一区二区三区亚洲| 欧美色图激情小说| 91精品国产欧美一区二区成人| 91精品啪在线观看国产60岁| 精品日韩一区二区三区| 欧美精品一区二| 中文在线免费一区三区高中清不卡| 日本一区二区久久| 樱桃视频在线观看一区| 日韩av一区二区三区四区| 久久99精品国产麻豆婷婷| 国产精品乡下勾搭老头1| 99热精品一区二区| 欧美蜜桃一区二区三区| 久久亚洲精精品中文字幕早川悠里| 国产情人综合久久777777| 一区二区三区高清不卡| 免费在线一区观看| 成人黄动漫网站免费app| 欧美激情在线观看视频免费| 亚洲免费在线电影| 男女激情视频一区| av在线这里只有精品| 欧美老年两性高潮| 国产日韩欧美不卡在线| 亚洲午夜私人影院| 国产成人在线看| 欧美日韩国产一二三| 国产欧美综合色| 午夜精品久久久久久久久久 | 亚洲图片自拍偷拍| 狠狠v欧美v日韩v亚洲ⅴ| 91国偷自产一区二区三区观看| 精品剧情在线观看| 亚洲亚洲人成综合网络| 国产精品1区2区| 91精品国产综合久久精品| 亚洲欧洲另类国产综合| 精彩视频一区二区三区| 欧美这里有精品| 国产精品国产三级国产aⅴ中文| 男男视频亚洲欧美| 欧美亚一区二区| 国产精品成人免费精品自在线观看| 男人的天堂亚洲一区| 色综合久久久久久久久久久| 久久久精品蜜桃| 免费高清视频精品| 欧美午夜视频网站| 亚洲精品一二三| 成人一区二区三区| 久久久亚洲精品一区二区三区| 天天爽夜夜爽夜夜爽精品视频| www.久久精品| 中文字幕乱码日本亚洲一区二区| 久久成人免费网站| 欧美丰满少妇xxxxx高潮对白| 亚洲精品国久久99热| 从欧美一区二区三区| 久久久久一区二区三区四区| 男人的j进女人的j一区| 欧美日韩不卡视频| 午夜私人影院久久久久| 欧美中文字幕一区二区三区| 一区二区三区在线影院| 色香色香欲天天天影视综合网| 中文字幕一区二区三区精华液| 国产不卡在线一区| 国产精品丝袜一区|