📄 uiscrollbar.c
字号:
/******************************************************************/
/* Copyright (C) 2007 ROCK-CHIPS FUZHOU . All Rights Reserved. */
/*******************************************************************
File : uiscrollbar.c
Desc : 滚动条
Author : GUI Develop Group.lzj
Date : 2007-08-10
Notes :
$Log: uiscrollbar.c,v $
Revision 1.2 2008/06/19 04:43:21 Administrator
代码整理!
Revision 1.1.1.1 2008/05/07 04:15:08 Administrator
no message
Revision 1.1.1.1 2008/03/06 13:29:09 Lingzhaojun
no message
Revision 1.4 2007/10/15 02:58:09 Lingzhaojun
添加GUI控件注释
Revision 1.3 2007/10/08 02:04:27 Lingzhaojun
GUI添加自动注释
*********************************************************************/
#include "uiscrollbar.h"
/*----------------------------------------------------------------------
Name : ScrollbarPaint
Desc : 滚动条画屏
Params:
Return: 处理结果
Author: Lingzj
Date : 070830
----------------------------------------------------------------------*/
UINT32 ScrollbarPaint(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
W_ScrollBar *WscrollObj = (W_ScrollBar *)win->Data;
UINT16 x, y, x1, y1;
DispMode TranspLevel = WinGetTranStyle(win->style);
if (!(WIN_NEEDPAIT(win)))
return TRUE;
//画背景
x = win->x;
y = win->y;
x1 = win->x + win->w;
y1 = win->y + win->h;
while (y < y1 - WscrollObj->ScrollHight)
{
DrawBmpIdEx(x, y, WscrollObj->Iconback, NULL, TranspLevel);
y = y + WscrollObj->ScrollHight;
}
DrawBmpIdEx(x, (UINT16)(y1 - WscrollObj->ScrollHight), WscrollObj->Iconback, NULL, TranspLevel);
//画上下按钮
DrawBmpIdEx(win->x, win->y, WscrollObj->IconUp, NULL, TranspLevel);
DrawBmpIdEx(win->x, (UINT16)(win->y + win->h - WscrollObj->TopHight), WscrollObj->IconDown, NULL, TranspLevel);
//画滑块
if (WscrollObj->Percent > MaxScroll)
WscrollObj->Percent = MaxScroll;
x = win->x + (win->w - WscrollObj->ScrollWeight) / 2;
y = win->y + WscrollObj->TopHight + (win->h - 2 * WscrollObj->TopHight - WscrollObj->ScrollLen) * WscrollObj->Percent / MaxScroll;
WscrollObj->CurPositionY = y;
y1 = y + WscrollObj->ScrollLen;
while (y < y1 - WscrollObj->ScrollHight)
{
DrawBmpIdEx(x, y, WscrollObj->IconScroll, NULL, TranspLevel);
y = y + WscrollObj->ScrollHight;
}
DrawBmpIdEx(x, (UINT16)(y1 - WscrollObj->ScrollHight), WscrollObj->IconScroll, NULL, TranspLevel);
WIN_CLEARPAIT(win);
return TRUE;
}
/*----------------------------------------------------------------------
Name : ScrollbarKey
Desc : 滚动条对按键的响应
Params:
Return: 处理结果
Author: Lingzj
Date : 070830
----------------------------------------------------------------------*/
UINT32 ScrollbarKey(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
return TRUE;
}
/*----------------------------------------------------------------------
Name : ScrollbarTouch
Desc : 滚动条对触摸屏的响应
Params:
Return: 处理结果
Author: Lingzj
Date : 070830
----------------------------------------------------------------------*/
UINT32 ScrollbarTouch(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
W_ScrollBar *WscrollObj = (W_ScrollBar *)win->Data;
PUHPOINT touchPoint = (PUHPOINT)lParam;
UINT16 y0, y1;
//上下按钮
if ((touchPoint->y < win->y + WscrollObj->TopHight)
&& (touchPoint->y > win->y)
&& (wParam == TM_STATE_DOWN))
return ScrollbarCommand(win, EV_ScrollUp, NULL);
if ((touchPoint->y > win->y + win->h - WscrollObj->TopHight)
&& (touchPoint->y < win->y + win->h)
&& (wParam == TM_STATE_DOWN))
return ScrollbarCommand(win, EV_ScrollDown, NULL);
if ((wParam == TM_STATE_DOWN) || (wParam == TM_STATE_MOVE))
{
//触及滚动条,拖动
if (touchPoint->y < WscrollObj->CurPositionY)
{
y0 = win->y + WscrollObj->TopHight;
y1 = win->y + win->h - WscrollObj->TopHight - WscrollObj->ScrollLen;
WscrollObj->Percent = (touchPoint->y - y0) * MaxScroll / (y1 - y0);
}
else if (touchPoint->y > WscrollObj->CurPositionY + WscrollObj->ScrollLen)
{
y0 = win->y + WscrollObj->TopHight;
y1 = win->y + win->h - WscrollObj->TopHight - WscrollObj->ScrollLen;
WscrollObj->Percent = (touchPoint->y - WscrollObj->ScrollLen - y0 + 1) * MaxScroll / (y1 - y0);
}
else //拖动滚动条
{
}
WinSendCommand(win, EV_ScrollChange);
WindowInvalidateWindow(win);
}
return TRUE;
}
/*----------------------------------------------------------------------
Name : ScrollbarCommand
Desc : 滚动条command消息处理,
Params:
Return: 处理结果
Author: Lingzj
Date : 070830
----------------------------------------------------------------------*/
UINT32 ScrollbarCommand(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
INT16U cwID = WM_CMD_GETCWID(wParam);
INT16U cwEvent = WM_CMD_GETEVENT(wParam);
W_ScrollBar *WscrollObj = (W_ScrollBar *)win->Data;
switch (cwEvent)
{
case EV_ScrollUp:
{
if (WscrollObj->Percent > 5)
WscrollObj->Percent = WscrollObj->Percent - 5;
else
WscrollObj->Percent = 0;
WinSendCommand(win, EV_ScrollChange);
WindowInvalidateWindow(win);
}
break;
case EV_ScrollDown:
{
if (WscrollObj->Percent < MaxScroll - 5)
WscrollObj->Percent = WscrollObj->Percent + 5;
else
WscrollObj->Percent = MaxScroll;
WinSendCommand(win, EV_ScrollChange);
WindowInvalidateWindow(win);
}
break;
}
return TRUE;
}
/*----------------------------------------------------------------------
Name : ScrollbarSetPercent
Desc : 滚动条设置滚动条的位置
Params: wParam:位置百分比
Return: 处理结果
Author: Lingzj
Date : 070830
----------------------------------------------------------------------*/
UINT32 ScrollbarSetPercent(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
W_ScrollBar *WscrollObj = (W_ScrollBar *)win->Data;
if (wParam > MaxScroll)
wParam = MaxScroll;
WscrollObj->Percent = wParam;
WindowInvalidateWindow(win);
return TRUE;
}
/*----------------------------------------------------------------------
Name : ScrollbarSetScrollLen
Desc : 设置滚动条的长度百分比
Params:
Return: 处理结果
Author: Lingzj
Date : 070830
----------------------------------------------------------------------*/
UINT32 ScrollbarSetScrollLen(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
W_ScrollBar *WscrollObj = (W_ScrollBar *)win->Data;
if (wParam > 100)
wParam = 100;
WscrollObj->ScrollLen = (win->h - 2 * WscrollObj->TopHight) * wParam / 100;
WindowInvalidateWindow(win);
return TRUE;
}
/*----------------------------------------------------------------------
Name : ScrollbarSetPic
Desc : 滚动条设置图片
Params:
Return: 处理结果
Author: Lingzj
Date : 070830
----------------------------------------------------------------------*/
UINT32 ScrollbarSetPic(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
return TRUE;
}
/*----------------------------------------------------------------------
Name : ScrollbarCreate
Desc : 滚动条创建
Params:
Return: 处理结果
Author: Lingzj
Date : 070830
----------------------------------------------------------------------*/
UINT32 ScrollbarCreate(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
W_ScrollBar *WscrollObj = NULL;
WscrollObj = MallocClass(W_ScrollBar);
if (NULL == WscrollObj)
return FALSE;
if (win->style&WES_ScrollSimple) /*风格一,无箭头*/
{
WscrollObj->IconScroll = win->BmpID; /*滚动条图标*/
WscrollObj->Iconback = win->BmpID + 1; /*滚动条背景图标*/
WscrollObj->IconUp = 0; /*滚动条顶部按钮图标*/
WscrollObj->IconDown = 0; /*滚动条底部按钮图标*/
WscrollObj->Percent = 0; /*当前滚动条的位置百分率*/
WscrollObj->ScrollHight = 20; /*滚动条高度*/
WscrollObj->ScrollWeight = 4; /*滚动条宽度*/
WscrollObj->ScrollLen = WscrollObj->ScrollHight + 7; /*滚动条长度*/
WscrollObj->TopHight = 0; /*上箭头高度*/
}
else if (win->style&WES_ScrollDefault) /*风格二*/
{
//win->BmpID=BID_Scroll;
WscrollObj->IconScroll = win->BmpID;
WscrollObj->Iconback = win->BmpID + 1;
WscrollObj->IconUp = BID_ScrollTop;
WscrollObj->IconDown = BID_Scrollbutton;
WscrollObj->Percent = 0;
WscrollObj->ScrollHight = 20;
WscrollObj->ScrollWeight = 8;
WscrollObj->ScrollLen = WscrollObj->ScrollHight + 7;
WscrollObj->TopHight = 11;
}
win->Data = WscrollObj;
return TRUE;
}
/*----------------------------------------------------------------------
Name : ScrollbarDestroy
Desc : 滚动条关闭
Params:
Return: 处理结果
Author: Lingzj
Date : 070830
----------------------------------------------------------------------*/
UINT32 ScrollbarDestroy(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
W_ScrollBar *WscrollObj = (W_ScrollBar *)win->Data;
FreeClass(WscrollObj);
return TRUE;
}
/*----------------------------------------------------------------------
Name : GetScrollPercent
Desc : 滚动条获取位置的百分比
Params:
Return: 处理结果
Author: Lingzj
Date : 070830
----------------------------------------------------------------------*/
UINT32 GetScrollPercent(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
W_ScrollBar *WscrollObj = (W_ScrollBar *)win->Data;
return WscrollObj->Percent;
}
/*滚动条消息描述表*/
BEGIN_CHILDMESSAGE_MAP(WinScrollProcMap , CW_TYPE_SCROLLBAR)
ON_MESSAGE(WM_PAINT , ScrollbarPaint)
ON_MESSAGE(WM_COMMAND, ScrollbarCommand)
ON_MESSAGE(WM_DESTROY , ScrollbarDestroy)
ON_MESSAGE(WM_CREATE, ScrollbarCreate)
ON_MESSAGE(WM_SetPic, ScrollbarSetPic)
ON_MESSAGE(WM_TOUCH , ScrollbarTouch)
ON_MESSAGE(WM_SetPercent , ScrollbarSetPercent)
ON_MESSAGE(WM_SetScrollLen, ScrollbarSetScrollLen)
ON_MESSAGE(WM_GetPercent, GetScrollPercent)
END_MESSAGE_MAP()
#if 0
/*
Name: WindowCreateScroll
Desc: 滚动条窗口创建函数
*/
WINDOW* WindowCreateScroll(
WINDOW *parent, //父窗口
INT32U style, //风格
WIN_ID id , //窗口 ID
INT16S x, //窗口ID
INT16S y,
INT16S w,
INT16S h,
INT16U captionId,
INT16U bmpId,
PCHILD_WINDOW childList, //子窗口列表.
PWINDOW_PROCREG procRegList , //消息处理列表.
void *privateData //私有数据
)
{
WINDOW*win = NULL;
UINT16 i = 0;
//两个按钮子窗口
CHILD_WINDOW ChildButton[] =
{
{CW_TYPE_Button, WID_ButtonTop, 0, 0, 12, 11, (WS_TICK | WS_CHILDS | WS_ACTIVE | WS_BEFOCUS), 0, BID_ScrollTop},
{CW_TYPE_Button, WID_ButtonBottom, 0, 0, 12, 11, (WS_TICK | WS_CHILDS | WS_ACTIVE | WS_BEFOCUS), 0, BID_Scrollbutton},
CWIN_LASTITEM
};
if (style&WES_ScrollDefault)
{
ChildButton[0].x = x;
ChildButton[0].y = y;
ChildButton[1].x = x;
ChildButton[1].y = y + h - ChildButton[1].h;
/*创建对话框窗口*/
win = WindowCreate(parent ,
style | WS_TICK,
id,
x, y,
w, h,
0,
bmpId,
0,
ChildButton,
WinScrollProcMap,
NULL);
}
return win;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -