⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ctrldemo.c

📁 HGui4.1.rar
💻 C
📖 第 1 页 / 共 2 页
字号:
//---------------------------------------------------------------------------------
// Copyright (c) Haisoft 2006-9-1
// Copyright jinhailiao 2008-2010
// E-mail:   jinhailiao@163.com
// Project:			HGui
// File:			desktop.c
// Description:		
//-------------------------------------------------------------
// Reversion Histroy:
//-------------------------------------------------------------
// Version		date		operations				by who
// 1.0.0		2006-09-01	Create					Kingsea
// 3.0.0		2008-03-01	update					Kingsea
//---------------------------------------------------------------------------------

#include "schedule.h"
#include "haievent.h"
#include "stdio.h"
#include "haigdi.h"
#include "haitime.h"
#include "haihandle.h"
#include "bmpicon.h"
#include "virkey.h"
#include "haicaret.h"
#include "haimem.h"
#include "AppIDs.h"
#include "haictrl.h"
#include "haigui.h"
#include "haiscene.h"
#include "msgbox.h"
#include "dialog.h"


DEFINESCENE(SID_CTRLDEMO1)
MSGMAPBEGIN
	ONCREAT(Ctrl1OnCreat)
	ONMSG(EVT_PAINT, Ctrl1OnPaint)
	ONMSG(EVT_COMMAND, Ctrl1OnCommand)
	ONKEYDN(Ctrl1OnKey)
	ONMSG(EVT_CTRLCOLOR, Ctrl1OnCtrlColr)
	ONMSG(EVT_EXIT, Ctrl1OnExit)
	ONDESTROY(Ctrl1OnDestroy)
MSGMAPEND

#define C1_TEXTC_BLACK		0
#define C1_TEXTC_RED		1
#define C1_TEXTC_GREEN		2
#define C1_TEXTC_BLUE		3

#define C1_LINE_PERPAGE		11

S_COLOR TEXTC[] = {0x000000, 0xFF0000, 0x00FF00, 0x0000FF};
S_BYTE *DemoText[] =
{
	"01.在每一天我在流连",
	"02.这心漂泊每朝每夜",
	"03.多么想找到愿意相随同伴",
	"04.使这心莫再漂泊",
	"05.愿那一天你来临时",
	"06.轻轻给我你的接受",
	"07.给我知道眼眸里的人",
	"08.承诺的一切永没改变",
	"09.多少期望多少梦",
	"10.皆因心里多孤寂",
	"11.即使期望多飘渺",
	"12.期望已能令我跨进未来!",
	"13.没有得到我愿寻求",
	"14.得到的怎么不接受",
	"15.尽管想拥有但却只能期待",
	"16.始终只醉在心里",
	"17.丝丝期望渐飘渺",
	"18.编织千寸心里梦",
	"19.即使希望似梦幻",
	"20.人渐醉在梦里海市蜃楼",
	"21.让我编织海市蜃楼",
	"22.一天一天浅醉一生",
};

typedef struct tagCtrl1Dat
{
	S_BYTE PreColor;
	S_BYTE textColor;
	S_SHORT hl;
	S_DWORD totalLine;
	S_DWORD start;
	SH_CTRL hScrlBar;
}
S_CTRL1DAT, *SP_CTRL1DAT;

static S_VOID Ctrl1ShowText(SH_DC hDC, S_BYTE **pptext, S_SHORT start, S_SHORT total, S_SHORT x, S_SHORT y, S_SHORT rowSpace)
{
	S_SHORT i;
	SP_CTRL1DAT pcd = hai_GetSceneData(0);

	for (i = 0;i < total; i++)
	{
		hai_TextOut(hDC, (S_SHORT)(x+10), (S_SHORT)(y+i*rowSpace), pptext[start+i], 0);
	}
	hai_TextOut(hDC, x, (S_SHORT)(y+pcd->hl*rowSpace), "*", 0);
}
static void  Ctrl1OnCreat(SP_EVT pEvent)
{
	S_BYTE Welcome[40] = {"欢迎"};
	SP_CTRL1DAT pcd = hai_GetSceneData(sizeof(*pcd));

	strcat(Welcome, (S_BYTE *)pEvent->lParam);
	hai_CreateStatic(CS_TEXT_MIDDLE|CS_TEXT_CENTER, 1, 160, 6, 160, 20, Welcome, S_NULL);
	hai_CreateButton(BS_CHECKBTN, 2, 20, 30, 100, 18, "我是复选按钮.", 0, 0, 0);
	hai_CreateButton(BS_CHECKBTN, 3, 20, 50, 100, 18, "请选择!", 0, 0, 0);
	hai_CreateButton(BS_CHECKBTN, 4, 20, 70, 100, 18, "请点击我...", 0, 0, 0);
	hai_CreateButton(BS_CHECKBTN, 5, 20, 90, 100, 18, "谢谢!", 0, 0, 0);
	hai_CreateStatic(CS_TEXT_MIDDLE|CS_TEXT_CENTER, 6, 20, 140, 100, 20, "请选择文本颜色:", S_NULL);
	hai_CreateButton(BS_RADIOBTN, 7, 30, 164, 80, 18, "黑色...", 0, 0, 0);
	hai_CreateButton(BS_RADIOBTN, 8, 30, 184, 80, 18, "红色...", 0, 0, 0);
	hai_CreateButton(BS_RADIOBTN, 9, 30, 204, 80, 18, "绿色...", 0, 0, 0);
	hai_CreateButton(BS_RADIOBTN, 10,30, 224, 80, 18, "蓝色...", 0, 0, 0);
	hai_CreateButton(BS_PUSHBTN, 11, 116, 244, 50, 20, "应用", 0, 0, 0);
	hai_CreateListArea(0, 13, 202, 42, 248, 220, 20);
	pcd->textColor = C1_TEXTC_BLACK;
	pcd->PreColor  = C1_TEXTC_BLACK;
	pcd->hl        = 0;
	pcd->totalLine = 22;
	pcd->start     = 0;
	pcd->hScrlBar  = hai_CreateScrlBar(BS_VSCRLBAR, 12, 453, 41, 20, 220, pcd->totalLine, pcd->start, C1_LINE_PERPAGE);
	hai_ShowAllCtrl();
	hai_CheckRadioButton(hai_GetCurSceneCtrl(7));
}

static void  Ctrl1OnPaint(SP_EVT pEvent)
{
	S_DWORD textStart;
	SH_DC hDC;
	SH_BRUSH hBrush;
	S_PAINTSTRUCT Paint;
	SP_CTRL1DAT pcd = hai_GetSceneData(sizeof(*pcd));

	hDC = hai_BeginPaint(&Paint);
	hBrush = (SH_BRUSH)hai_GetStockObject(LTGRAY_BRUSH);
	hai_SelectObject(hDC, (SH_GDIOBJ)hBrush);
	hai_BitBlt(hDC, 0, 0, LCD_WIDTH, LCD_HEIGHT, S_NULL, 0, 0, WHITENESS);
	hai_BitBlt(hDC, 2, 2, LCD_WIDTH-4, LCD_HEIGHT-4, S_NULL, 0, 0, PATCOPY);
	hai_Draw3DBlock(hDC, 200, 40, 270, 222, S_FALSE, WHITE_BRUSH);
	hai_SetBkMode(hDC, BKM_TRANSPARENT);
	hai_SetTextColor(hDC, TEXTC[pcd->textColor]);
	hai_GetScrlBarInfo(pcd->hScrlBar, &textStart, S_NULL, S_NULL);
	Ctrl1ShowText(hDC, DemoText, (S_SHORT)textStart, 11, 208, 44, 20);
	hai_EndPaint(&Paint);
}

static void  Ctrl1OnCtrlColr(SP_EVT pEvent)
{
	switch (pEvent->wParam)
	{
	case 7:
	case 8:
	case 9:
	case 10:
		hai_SetTextColor((SH_DC)pEvent->lParam, TEXTC[pEvent->wParam-7]);
		break;
	default:
		break;
	}
}


static void  Ctrl1OnCommand(SP_EVT pEvent)
{
	S_BYTE CtrlID = HAI_GETLOBYTE(pEvent->wParam);
	S_BYTE Event  = HAI_GETHIBYTE(pEvent->wParam);
	S_WORD textStart;
	S_DWORD temp;
	SH_DC hDC;
	SP_CTRL1DAT pcd = hai_GetSceneData(sizeof(*pcd));

	switch (CtrlID)
	{
	case 7:
	case 8:
	case 9:
	case 10:
		if (Event == BS_CHECKBTN_CHECKED)
			pcd->PreColor = CtrlID-7;
		break;
	case 11:
		if (Event == BS_PUSHBTN_UP)
		{
			if (pcd->textColor != pcd->PreColor)
			{
				pcd->textColor = pcd->PreColor;
				hai_InvalidRect(S_NULL);
			}
		}
		break;
	case 12:
		hai_GetScrlBarInfo(pcd->hScrlBar, &temp, S_NULL, S_NULL);
		hDC = hai_GetSceneDC();
		textStart = (S_WORD)temp;
		switch (Event)
		{
		case SB_BOTTOM:
			if (textStart != pcd->totalLine - C1_LINE_PERPAGE)
			{
				hai_BitBlt(hDC, 204, 44, 240, 214, S_NULL, 0, 0, WHITENESS);
				hai_SetBkMode(hDC, BKM_TRANSPARENT);
				hai_SetTextColor(hDC, TEXTC[pcd->textColor]);
				Ctrl1ShowText(hDC, DemoText, (S_SHORT)(pcd->totalLine - C1_LINE_PERPAGE), 11, 208, 44, 20);
				hai_SetScrlBarInfo(pcd->hScrlBar, pcd->totalLine - C1_LINE_PERPAGE, pcd->totalLine, C1_LINE_PERPAGE);
				hai_UpdateWindow(200, 40, 270, 222);
			}
			break;
		case SB_LINEDOWN:
			if (textStart < pcd->totalLine - C1_LINE_PERPAGE)
			{
				hai_BitBlt(hDC, 204, 44, 240, 214, S_NULL, 0, 0, WHITENESS);
				hai_SetBkMode(hDC, BKM_TRANSPARENT);
				hai_SetTextColor(hDC, TEXTC[pcd->textColor]);
				Ctrl1ShowText(hDC, DemoText, (S_SHORT)(textStart+1), 11, 208, 44, 20);
				hai_SetScrlBarInfo(pcd->hScrlBar, textStart+1, pcd->totalLine, C1_LINE_PERPAGE);
				hai_UpdateWindow(200, 40, 270, 222);
			}
			break;
		case SB_LINEUP:
			if (textStart > 0)
			{
				hai_BitBlt(hDC, 204, 44, 240, 214, S_NULL, 0, 0, WHITENESS);
				hai_SetBkMode(hDC, BKM_TRANSPARENT);
				hai_SetTextColor(hDC, TEXTC[pcd->textColor]);
				Ctrl1ShowText(hDC, DemoText, (S_SHORT)(textStart-1), 11, 208, 44, 20);
				hai_SetScrlBarInfo(pcd->hScrlBar, textStart-1, pcd->totalLine, C1_LINE_PERPAGE);
				hai_UpdateWindow(200, 40, 270, 222);
			}
			break;
		case SB_PAGEDOWN:
			if (textStart  < pcd->totalLine - C1_LINE_PERPAGE)
			{
				if ((S_DWORD)(textStart+2*C1_LINE_PERPAGE) <= pcd->totalLine)
					textStart += C1_LINE_PERPAGE;
				else
					textStart  = (S_WORD)(pcd->totalLine - C1_LINE_PERPAGE);
				hai_BitBlt(hDC, 204, 44, 240, 214, S_NULL, 0, 0, WHITENESS);
				hai_SetBkMode(hDC, BKM_TRANSPARENT);
				hai_SetTextColor(hDC, TEXTC[pcd->textColor]);
				Ctrl1ShowText(hDC, DemoText, textStart, 11, 208, 44, 20);
				hai_SetScrlBarInfo(pcd->hScrlBar, textStart, pcd->totalLine, C1_LINE_PERPAGE);
				hai_UpdateWindow(200, 40, 270, 222);
			}
			break;
		case SB_PAGEUP:
			if (textStart > 0)
			{
				if (textStart >= C1_LINE_PERPAGE)
					textStart -= C1_LINE_PERPAGE;
				else
					textStart  = 0;
				hai_BitBlt(hDC, 204, 44, 240, 214, S_NULL, 0, 0, WHITENESS);
				hai_SetBkMode(hDC, BKM_TRANSPARENT);
				hai_SetTextColor(hDC, TEXTC[pcd->textColor]);
				Ctrl1ShowText(hDC, DemoText, textStart, 11, 208, 44, 20);
				hai_SetScrlBarInfo(pcd->hScrlBar, textStart, pcd->totalLine, C1_LINE_PERPAGE);
				hai_UpdateWindow(200, 40, 270, 222);
			}
			break;
		case SB_THUMBPOSITION:
		case SB_THUMBTRACK:
			hai_BitBlt(hDC, 204, 44, 240, 214, S_NULL, 0, 0, WHITENESS);
			hai_SetBkMode(hDC, BKM_TRANSPARENT);
			hai_SetTextColor(hDC, TEXTC[pcd->textColor]);
			Ctrl1ShowText(hDC, DemoText, (S_SHORT)(pEvent->lParam), 11, 208, 44, 20);
			hai_SetScrlBarInfo(pcd->hScrlBar, pEvent->lParam, pcd->totalLine, C1_LINE_PERPAGE);
			hai_UpdateWindow(200, 40, 270, 222);
			break;
		case SB_TOP:
			if (textStart != 0)
			{
				hai_BitBlt(hDC, 204, 44, 240, 214, S_NULL, 0, 0, WHITENESS);
				hai_SetBkMode(hDC, BKM_TRANSPARENT);
				hai_SetTextColor(hDC, TEXTC[pcd->textColor]);
				Ctrl1ShowText(hDC, DemoText, 0, 11, 208, 44, 20);
				hai_SetScrlBarInfo(pcd->hScrlBar, 0, pcd->totalLine, C1_LINE_PERPAGE);
				hai_UpdateWindow(200, 40, 270, 222);
			}
			break;
		default:
			break;
		}
		hai_DeleteDC(hDC);
		break;
	case 13:
		if (EVT_MOUSEDN == Event)
		{
			hDC = hai_GetSceneDC();
			hai_SetTextColor(hDC, TEXTC[pcd->textColor]);
			hai_TextOut(hDC, 208, (S_SHORT)(44+pcd->hl*20), " ", 0);
			hai_UpdateWindow(208, (S_SHORT)(44+pcd->hl*20), 6, 12);
			pcd->hl = (S_BYTE)(pEvent->lParam);
			hai_TextOut(hDC, 208, (S_SHORT)(44+pcd->hl*20), "*", 0);
			hai_DeleteDC(hDC);
			hai_UpdateWindow(208, (S_SHORT)(44+pcd->hl*20), 6, 12);
		}
		break;
	default:
		break;
	}
}

static void  Ctrl1OnKey(SP_EVT pEvent)
{
	SP_CTRL1DAT pcd = hai_GetSceneData(sizeof(*pcd));
	switch (pEvent->wParam)
	{
	case VK_PRIOR:
	case VK_NEXT:
	case VK_END:
	case VK_HOME:
	case VK_UP:
	case VK_DOWN:
		hai_SendCtrlEvt(pcd->hScrlBar, pEvent->EventType, pEvent->wParam, pEvent->lParam);
		break;
	case VK_ESCAPE:
		hai_PostEvent(EVT_DESTROY, 0, 0);
		break;
	case VK_RETURN:
		break;

	case '2':
		hai_DestroyCtrl(hai_GetCurSceneCtrl(2));
		break;
	case '3':
		hai_DestroyCtrl(hai_GetCurSceneCtrl(3));
		break;

	default:
		break;
	}
}

static void  Ctrl1OnExit(SP_EVT pEvent)
{
	hai_ReleaseSceneData();
}

static void  Ctrl1OnDestroy(SP_EVT pEvent)
{
	hai_ReleaseSceneData();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -