|
本帖最后由 飛饵 于 2020-6-30 20:21 编辑
捣鼓了下SWIPELIST控件,刚开始做了个简单的来测试,删除窗口,结束对话框什么的都正常。然后继续加了很多子控件和配置上去,结果就出现冲突了。现在删掉一些保留最开始的那个还是不行,不知道出了什么问题。
------------------------------------------------------------------------ 问题解决转为分享 -------------------------------------------------------------------------
简单易用,效果也不错,F407上实测非常流畅。从 _cbDialog() 函数从头到尾看一遍就能知道这控件的配置过程
- #include <stdio.h>
- #include "DIALOG.h"
- #include "SWIPELIST.h"
- /*
- *------------------ 宏 定 义 ----------------------------------------------------------
- *--------------------------------------------------------------------------------------
- */
- #define ID_WINDOW_0 (GUI_ID_USER + 0x00)
- #define ID_SWIPELIST_0 (GUI_ID_USER + 0x01)
- #define ID_BUTTON_0 (GUI_ID_USER + 0x02)
- #define ID_RADIO_0 (GUI_ID_USER + 0x03)
- #define ID_RADIO_1 (GUI_ID_USER + 0x04)
- #define ID_RADIO_2 (GUI_ID_USER + 0x05)
- #define ID_SLIDER_0 (GUI_ID_USER + 0x06)
- /*
- *------------------ 静 态 数 据 --------------------------------------------------------
- *--------------------------------------------------------------------------------------
- */
- /*
- *----------- 窗口控件数据数组 -------------
- *
- *
- */
- static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
- {WINDOW_CreateIndirect, "SettingWindow", ID_WINDOW_0, 0, 0, 320, 240, 0, 0x64, 0},
- {SWIPELIST_CreateIndirect, "Swipelist", ID_SWIPELIST_0, 0, 30, 320, 210, 0, 0x0, 0},
- {BUTTON_CreateIndirect, "Back", ID_BUTTON_0, 0, 0, 50, 30, 0, 0x0, 0},
- };
- /*
- *------------------ 用 户 代 码 数 据 --------------------------------------------------
- *--------------------------------------------------------------------------------------
- */
- /*
- *----------- 全局变量引用 -------------
- *
- *
- */
- //extern GUI_CONST_STORAGE GUI_BITMAP bm_icon_bl_highest;
- //extern GUI_CONST_STORAGE GUI_BITMAP bm_icon_bl_middle;
- //extern GUI_CONST_STORAGE GUI_BITMAP bm_icon_bl_lowest;
- //extern GUI_CONST_STORAGE GUI_BITMAP bm_icon_setting_return_prs;
- //extern GUI_CONST_STORAGE GUI_BITMAP bm_icon_setting_return_unprs;
- /*
- *----------- 窗口背景回调函数 -------------
- * 形参:*pMsg:消息指针
- *
- * 说明:绘制窗口的背景
- */
- static void _cbBkWindows(WM_MESSAGE *pMsg)
- {
- WM_HWIN hItem, hAttachItem;
- int Id, NCode;
- switch(pMsg->MsgId)
- {
- case WM_NOTIFY_PARENT:
- Id = WM_GetId(pMsg->hWinSrc);
- NCode = pMsg->Data.v;
- switch (Id)
- {
- case ID_BUTTON_0:
- switch (NCode)
- {
- case WM_NOTIFICATION_RELEASED:
- WM_HideWindow(pMsg->hWin);
- break;
- }
- break;
- }
- break;
- case WM_PAINT:
- GUI_SetBkColor(0x002B2F17);
- GUI_Clear();
- GUI_SetFont(&GUI_Font24B_ASCII);
- GUI_DispStringAt("Settings", 50, 2);
- break;
- default:
- WM_DefaultProc(pMsg);
- break;
- }
- }
- /*
- *----------- 滑动列表子控件回调函数 -------------
- * 形参:*pMsg:消息指针
- *
- * 说明:滑动列表上子控件的部分消息处理都在此回调中进行
- */
- static void _cbSwipeItems(WM_MESSAGE *pMsg)
- {
- WM_HWIN hItem;
- int Id, NCode;
- switch (pMsg->MsgId)
- {
- case WM_NOTIFY_PARENT:
- Id = WM_GetId(pMsg->hWinSrc);
- NCode = pMsg->Data.v;
- switch (Id)
- {
- case ID_RADIO_0:
- switch (NCode)
- {
- }
- break;
- case ID_RADIO_1:
- hItem = WM_GetDialogItem(pMsg->hWin, ID_RADIO_1);
- switch (NCode)
- {
- case WM_NOTIFICATION_VALUE_CHANGED:
- //
- //
- //
- break;
- }
- break;
- case ID_RADIO_2:
- hItem = WM_GetDialogItem(pMsg->hWin, ID_RADIO_2);
- switch (NCode)
- {
- case WM_NOTIFICATION_VALUE_CHANGED:
- //
- //
- //
- break;
- }
- break;
- case ID_SLIDER_0:
- hItem = WM_GetDialogItem(pMsg->hWin, ID_SLIDER_0);
- switch (NCode)
- {
- case WM_NOTIFICATION_CLICKED:
- WM_MOTION_Enable(0); //选中控件时禁止滑动
- break;
- case WM_NOTIFICATION_RELEASED:
- WM_MOTION_Enable(1); //送手开启滑动
- break;
- case WM_NOTIFICATION_VALUE_CHANGED:
- //
- //
- //
- break;
- }
- break;
-
- }
- break;
- default:
- SWIPELIST_Callback(pMsg);
- break;
- }
- }
- /*
- *----------- 设置界面返回按钮回调函数 -------------
- * 形参:*pMsg:消息指针
- *
- * 返回:
- * 说明:主要用来绘制位图
- */
- static void _cbButtonBack(WM_MESSAGE *pMsg)
- {
- switch (pMsg->MsgId)
- {
- case WM_PAINT:
- if(BUTTON_IsPressed(pMsg->hWin)) //按钮按下状态
- {
- //GUI_DrawBitmap(&bm_icon_setting_return_prs, 0, 0);
- GUI_SetColor(GUI_RED);
- GUI_DispStringAt("pressed", 5, 10);
- }
- else //未按下状态
- {
- //GUI_DrawBitmap(&bm_icon_setting_return_unprs, 0, 0);
- GUI_SetColor(GUI_WHITE);
- GUI_DispStringAt("unpressed", 0, 10);
- }
- break;
- default:
- BUTTON_Callback(pMsg);
- break;
- }
- }
- /*
- *------------------ 系 统 回 调 函 数 --------------------------------------------------
- *--------------------------------------------------------------------------------------
- */
- /*
- *----------- 窗口回调函数 -------------
- * 形参:*pMsg:消息指针
- *
- * 说明:整个界面的主回调函数
- */
- static void _cbDialog(WM_MESSAGE *pMsg)
- {
- WM_HWIN hItem, hAttachItem;
- int Id, NCode;
- char str[30];
- switch (pMsg->MsgId)
- {
- case WM_INIT_DIALOG:
- /*设置窗口背景回调*/
- WM_SetCallback(pMsg->hWin, _cbBkWindows);
- /*设置设置返回按钮回调*/
- hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0);
- WM_SetCallback(hItem, _cbButtonBack);
- /*Swipelist初始化*/
- hItem = WM_GetDialogItem(pMsg->hWin, ID_SWIPELIST_0);
- WM_SetCallback(hItem, _cbSwipeItems); //子控件回调
- WM_MOTION_SetMoveable(hItem, WM_CF_MOTION_Y, 1); //给滑动列表打开移动功能
- SWIPELIST_SetFont(hItem, SWIPELIST_FI_ITEM_HEADER, &GUI_Font16B_ASCII); //设置字体
- SWIPELIST_SetFont(hItem, SWIPELIST_FI_ITEM_TEXT, &GUI_Font16B_ASCII);
- SWIPELIST_SetBkColor(hItem, SWIPELIST_CI_BK_ITEM_UNSEL, 0x00444A24); //设置背景颜色
- SWIPELIST_SetBkColor(hItem, SWIPELIST_CI_BK_ITEM_SEL, 0x00535B2D);
- SWIPELIST_SetTextColor(hItem, SWIPELIST_CI_SEP_ITEM_TEXT, 0x002B2F17); //设置分隔符项目文本的颜色
- SWIPELIST_SetTextColor(hItem, SWIPELIST_CI_ITEM_HEADER_UNSEL, GUI_WHITE); //设置表头文本(第一个文本)的颜色
- SWIPELIST_SetTextColor(hItem, SWIPELIST_CI_ITEM_HEADER_SEL, GUI_WHITE);
- SWIPELIST_SetTextColor(hItem, SWIPELIST_CI_ITEM_TEXT_UNSEL, GUI_WHITE); //设置描述文本(除了第一个的下面的文本)的颜色
- SWIPELIST_SetTextColor(hItem, SWIPELIST_CI_ITEM_TEXT_SEL, GUI_WHITE);
- /*添加列表项目和项目的选项及文本*/
- /*分隔项目0*/
- SWIPELIST_AddSepItem(hItem, " Sep0", 20); //项目,并添加分隔符项目文本
- SWIPELIST_AddItem(hItem, " Item1 - text0", 70); //项目里的选项,并设置表头文本
- SWIPELIST_AddItemText(hItem, 1, " "); //添加选项描述文本
- SWIPELIST_AddItemText(hItem, 1, " Item1 - text1");
- /*分隔项目1*/
- SWIPELIST_AddSepItem(hItem, " Sep1", 20);
- SWIPELIST_AddItem(hItem, " Item3 - text0", 160);
- SWIPELIST_AddItemText(hItem, 3, " ");
- SWIPELIST_AddItemText(hItem, 3, " Item3 - text2");
- SWIPELIST_AddItemText(hItem, 3, " ");
- SWIPELIST_AddItemText(hItem, 3, " Item3 - text4");
- SWIPELIST_AddItemText(hItem, 3, " ");
- SWIPELIST_AddItemText(hItem, 3, " Item3 - text6");
- SWIPELIST_AddItemText(hItem, 3, " Item3 - text7");
- SWIPELIST_AddItem(hItem, " Item4 - text0", 90);
- SWIPELIST_AddItemText(hItem, 4, " ");
- SWIPELIST_AddItemText(hItem, 4, " Item4 - text2");
- SWIPELIST_AddItemText(hItem, 4, " Item4 - text3");
- /*分隔项目2*/
- SWIPELIST_AddSepItem(hItem, " Sep2", 20);
- SWIPELIST_AddItem(hItem, " Item6 - text0", 50);
-
- /*往列表添加子控件*/
- /*
- 注意,SWIPELIST_ItemAttachWindow函数的第二个参数,索引值是从0开始,子控件在每个项目
- 中的索引值按顺序递增,在下一个项目中的第一个子控件索引要额外及加1,因为分隔符项目也占用一个索引。
- 比如,Sep0中子控件索引值为1,到了Sep1中,第一个子控件的索引值不是2而是3,第二个子控件则依然按顺序递增为4。
- */
- /*Sep0子控件-Item1*/
- hAttachItem = RADIO_CreateEx(0, 0, 20, 50, pMsg->hWin, WM_CF_SHOW, 0, ID_RADIO_0, 2, 32);
- SWIPELIST_ItemAttachWindow(hItem, 1, hAttachItem, 280, 12);
- /*Sep1子控件-Item3*/
- hAttachItem = RADIO_CreateEx(0, 0, 20, 120, pMsg->hWin, WM_CF_SHOW, 0, ID_RADIO_1, 4, 33);
- SWIPELIST_ItemAttachWindow(hItem, 3, hAttachItem, 280, 16);
- /*Sep1子控件-Item4*/
- hAttachItem = RADIO_CreateEx(0, 0, 20, 50, pMsg->hWin, WM_CF_SHOW, 0, ID_RADIO_2, 2, 31);
- SWIPELIST_ItemAttachWindow(hItem, 4, hAttachItem, 280, 15);
- /*Sep2子控件-Item6*/
- hAttachItem = SLIDER_CreateEx(0, 0, 200, 20, pMsg->hWin, WM_CF_SHOW , 0, ID_SLIDER_0);
- SWIPELIST_ItemAttachWindow(hItem, 6, hAttachItem, 100, 20);
- // SWIPELIST_SetBitmap(hItem, 6, SWIPELIST_BA_LEFT | SWIPELIST_BA_BOTTOM, &bm_icon_bl_highest); //显示图标
- SLIDER_SetRange(hAttachItem, 300, 1799);
- SLIDER_SetNumTicks(hAttachItem, 0); //不显示数值标记
- SLIDER_EnableFocusRect(hAttachItem, 0); //不显示聚焦虚线框
- SLIDER_SetWidth(hAttachItem, 15); //滑块大小
- break;
-
- case WM_PAINT:
-
- break;
- default:
- WM_DefaultProc(pMsg);
- break;
- }
- }
- /*
- *------------------ 公 共 代 码 --------------------------------------------------
- *--------------------------------------------------------------------------------
- */
- /*
- *----------- 创建窗口函数 -------------
- * 形参:无
- *
- * 说明:无
- */
- WM_HWIN CreateSettingWindow(void);
- WM_HWIN CreateSettingWindow(void) {
- WM_HWIN hWin;
- hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
- return hWin;
- }
复制代码 模拟器截图:
SettingWindowDLGnew.c
(9.09 KB, 下载次数: 19)
|
|