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

📄 dropdown.c

📁 MCB2300_ucgui_LCD320240.rar LPC2368的uc/gui的移植
💻 C
📖 第 1 页 / 共 2 页
字号:
*   	Exported routines:  Create
*
**********************************************************************
*/
/*********************************************************************
*
*   	DROPDOWN_CreateEx
*/
DROPDOWN_Handle DROPDOWN_CreateEx(int x0, int y0, int xsize, int ysize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id)
{
	DROPDOWN_Handle hObj;
	hObj = WM_CreateWindowAsChild(x0, y0, xsize, -1, hParent, WinFlags, _DROPDOWN_Callback, sizeof(DROPDOWN_Obj) - sizeof(WM_Obj));
	if (hObj)
	{
		DROPDOWN_Obj* pObj;
		WM_LOCK();
		pObj = DROPDOWN_H2P(hObj);
		/* Init sub-classes */
		GUI_ARRAY_CREATE(&pObj->Handles);
		/* init widget specific variables */
		WIDGET__Init(&pObj->Widget, Id, WIDGET_STATE_FOCUSSABLE);
		pObj->Flags = ExFlags;
		pObj->Props = DROPDOWN__DefaultProps;
		pObj->ScrollbarWidth = 0;
		INIT_ID(pObj);
		pObj->ySizeEx = ysize;
		DROPDOWN__AdjustHeight(hObj, pObj);
		WM_UNLOCK();
	}
	return hObj;
}

/*********************************************************************
*
*   	Exported routines:  Various methods
*
**********************************************************************
*/

/*********************************************************************
*
*   	DROPDOWN_Collapse
*/
void DROPDOWN_Collapse(DROPDOWN_Handle hObj)
{
	DROPDOWN_Obj* pObj;
	if (hObj)
	{
		WM_LOCK();
		pObj = DROPDOWN_H2P(hObj);
		if (pObj->hListWin)
		{
			WM_DeleteWindow(pObj->hListWin);
			pObj->hListWin = 0;
		}
		WM_UNLOCK();
	}
}

/*********************************************************************
*
*   	DROPDOWN_Expand
*/
void DROPDOWN_Expand(DROPDOWN_Handle hObj)
{
	int xSize, ySize, i, NumItems;
	WM_HWIN hLst;
	GUI_RECT r;
	WM_HWIN hParent;
	WM_Obj* pParent;
	DROPDOWN_Obj* pObj;
	if (hObj)
	{
		WM_LOCK();
		pObj = DROPDOWN_H2P(hObj);
		if (pObj->hListWin == 0)
		{
			hParent = WM_GetParent(hObj);
			pParent = WM_H2P(hParent);
			xSize = WM__GetWindowSizeX(&pObj->Widget.Win);
			ySize = pObj->ySizeEx;
			NumItems = _GetNumItems(pObj);
			/* Get coordinates of window in client coordiantes of parent */
			r = pObj->Widget.Win.Rect;
			GUI_MoveRect(&r, -pParent->Rect.x0, -pParent->Rect.y0);
			if (pObj->Flags & DROPDOWN_CF_UP)
			{
				r.y0 -= ySize;
			}
			else
			{
				r.y0 = r.y1;
			}
			hLst = LISTBOX_CreateAsChild(NULL, WM_GetParent(hObj), r.x0, r.y0, xSize, ySize, WM_CF_SHOW);
			if (pObj->Flags & DROPDOWN_SF_AUTOSCROLLBAR)
			{
				LISTBOX_SetScrollbarWidth(hLst, pObj->ScrollbarWidth);
				LISTBOX_SetAutoScrollV(hLst, 1);
			}
			for (i = 0; i < NumItems; i++)
			{
				LISTBOX_AddString(hLst, _GetpItem(pObj, i));
			}
			for (i = 0; i < GUI_COUNTOF(pObj->Props.aBackColor); i++)
			{
				LISTBOX_SetBkColor(hLst, i, pObj->Props.aBackColor[i]);
			}
			for (i = 0; i < GUI_COUNTOF(pObj->Props.aTextColor); i++)
			{
				LISTBOX_SetTextColor(hLst, i, pObj->Props.aTextColor[i]);
			}
			LISTBOX_SetItemSpacing(hLst, pObj->ItemSpacing);
			LISTBOX_SetFont(hLst, pObj->Props.pFont);
			WM_SetFocus(hLst);
			pObj->hListWin = hLst;
			LISTBOX_SetOwner(hLst, hObj);
			LISTBOX_SetSel(hLst, pObj->Sel);
			WM_NotifyParent(hObj, WM_NOTIFICATION_CLICKED);
		}
		WM_UNLOCK();
	}
}

/*********************************************************************
*
*   	DROPDOWN_AddKey
*/
void DROPDOWN_AddKey(DROPDOWN_Handle hObj, int Key)
{
	if (hObj)
	{
		WM_LOCK();
		switch (Key)
		{
			case GUI_KEY_DOWN:
				DROPDOWN_IncSel(hObj);
				break;
			case GUI_KEY_UP:
				DROPDOWN_DecSel(hObj);
				break;
			default:
				_SelectByKey(hObj, Key);
				break;
		}
		WM_UNLOCK();
	}
}

/*********************************************************************
*
*   	DROPDOWN_AddString
*/
void DROPDOWN_AddString(DROPDOWN_Handle hObj, const char *s)
{
	DROPDOWN_Obj* pObj;
	if (hObj && s)
	{
		WM_LOCK();
		pObj = DROPDOWN_H2P(hObj);
		GUI_ARRAY_AddItem(&pObj->Handles, s, strlen(s) + 1);
		DROPDOWN_Invalidate(hObj);
		WM_UNLOCK();
	}
}

/*********************************************************************
*
*   	DROPDOWN_GetNumItems
*/
int DROPDOWN_GetNumItems(DROPDOWN_Handle hObj)
{
	DROPDOWN_Obj* pObj;
	int r = 0;
	if (hObj)
	{
		WM_LOCK();
		pObj = DROPDOWN_H2P(hObj);
		ASSERT_IS_VALID_PTR(pObj);
		r = _GetNumItems(pObj);
		WM_UNLOCK();
	}
	return r;
}

/*********************************************************************
*
*   	DROPDOWN_SetFont
*/
void DROPDOWN_SetFont(DROPDOWN_Handle hObj, const GUI_FONT GUI_UNI_PTR *pfont)
{
	int OldHeight;
	DROPDOWN_Obj* pObj;
	if (hObj)
	{
		WM_LOCK();
		pObj = DROPDOWN_H2P(hObj);
		ASSERT_IS_VALID_PTR(pObj);
		OldHeight = GUI_GetYDistOfFont(pObj->Props.pFont);
		pObj->Props.pFont = pfont;
		DROPDOWN__AdjustHeight(hObj, pObj);
		DROPDOWN_Invalidate(hObj);
		if (pObj->hListWin)
		{
			if (OldHeight != GUI_GetYDistOfFont(pObj->Props.pFont))
			{
				DROPDOWN_Collapse(hObj);
				DROPDOWN_Expand(hObj);
			}
			LISTBOX_SetFont(pObj->hListWin, pfont);
		}
		WM_UNLOCK();
	}
}

/*********************************************************************
*
*   	DROPDOWN_SetBkColor
*/
void DROPDOWN_SetBkColor(DROPDOWN_Handle hObj, unsigned int Index, GUI_COLOR color)
{
	DROPDOWN_Obj* pObj;
	if (hObj)
	{
		if (Index < GUI_COUNTOF(pObj->Props.aBackColor))
		{
			WM_LOCK();
			pObj = DROPDOWN_H2P(hObj);
			ASSERT_IS_VALID_PTR(pObj);
			pObj->Props.aBackColor[Index] = color;
			DROPDOWN_Invalidate(hObj);
			if (pObj->hListWin)
			{
				LISTBOX_SetBkColor(pObj->hListWin, Index, color);
			}
			WM_UNLOCK();
		}
	}
}

/*********************************************************************
*
*   	DROPDOWN_SetTextColor
*/
void DROPDOWN_SetTextColor(DROPDOWN_Handle hObj, unsigned int Index, GUI_COLOR color)
{
	DROPDOWN_Obj* pObj;
	if (hObj)
	{
		if (Index < GUI_COUNTOF(pObj->Props.aBackColor))
		{
			WM_LOCK();
			pObj = DROPDOWN_H2P(hObj);
			ASSERT_IS_VALID_PTR(pObj);
			pObj->Props.aTextColor[Index] = color;
			DROPDOWN_Invalidate(hObj);
			if (pObj->hListWin)
			{
				LISTBOX_SetTextColor(pObj->hListWin, Index, color);
			}
			WM_UNLOCK();
		}
	}
}

/*********************************************************************
*
*   	DROPDOWN_SetSel
*/
void DROPDOWN_SetSel(DROPDOWN_Handle hObj, int Sel)
{
	int NumItems, MaxSel;
	DROPDOWN_Obj* pObj;
	if (hObj)
	{
		WM_LOCK();
		pObj = DROPDOWN_H2P(hObj);
		ASSERT_IS_VALID_PTR(pObj);
		NumItems = _GetNumItems(pObj);
		MaxSel = NumItems ? NumItems - 1 : 0;
		if (Sel > MaxSel)
		{
			Sel = MaxSel;
		}
		if (Sel != pObj->Sel)
		{
			pObj->Sel = Sel;
			DROPDOWN_Invalidate(hObj);
			WM_NotifyParent(hObj, WM_NOTIFICATION_SEL_CHANGED);
		}
		WM_UNLOCK();
	}
}

/*********************************************************************
*
*   	DROPDOWN_IncSel
*/
void DROPDOWN_IncSel(DROPDOWN_Handle hObj)
{
	int Sel = DROPDOWN_GetSel(hObj);
	DROPDOWN_SetSel(hObj, Sel + 1);
}

/*********************************************************************
*
*   	DROPDOWN_DecSel
*/
void DROPDOWN_DecSel(DROPDOWN_Handle hObj)
{
	int Sel = DROPDOWN_GetSel(hObj);
	if (Sel)
	{
		Sel--;
	}
	DROPDOWN_SetSel(hObj, Sel);
}

int DROPDOWN_GetSel(DROPDOWN_Handle hObj)
{
	int r = 0;
	DROPDOWN_Obj* pObj;
	if (hObj)
	{
		WM_LOCK();
		pObj = DROPDOWN_H2P(hObj);
		ASSERT_IS_VALID_PTR(pObj);
		r = pObj->Sel;
		WM_UNLOCK();
	}
	return r;
}

/*********************************************************************
*
*   	DROPDOWN_SetScrollbarWidth
*/
void DROPDOWN_SetScrollbarWidth(DROPDOWN_Handle hObj, unsigned Width)
{
	DROPDOWN_Obj* pObj;
	if (hObj)
	{
		WM_LOCK();
		pObj = DROPDOWN_H2P(hObj);
		ASSERT_IS_VALID_PTR(pObj);
		if (Width != (unsigned) pObj->ScrollbarWidth)
		{
			pObj->ScrollbarWidth = Width;
			if (pObj->hListWin)
			{
				LISTBOX_SetScrollbarWidth(pObj->hListWin, Width);
			}
		}
		WM_UNLOCK();
	}
}

/*********************************************************************
*
*   	DROPDOWN_SetDefaultFont
*/
void DROPDOWN_SetDefaultFont(const GUI_FONT *pFont)
{
	DROPDOWN__DefaultProps.pFont = pFont;
}

/*********************************************************************
*
*   	DROPDOWN_GetDefaultFont
*/
const GUI_FONT GUI_UNI_PTR * DROPDOWN_GetDefaultFont(void)
{
	return DROPDOWN__DefaultProps.pFont;
}


#else   						 /* Avoid problems with empty object modules */
void DROPDOWN_C(void)
{
}
#endif

⌨️ 快捷键说明

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