📄 ctrldemo.c
字号:
//---------------------------------------------------------------------------------
// 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 + -