复选框是选择各种不同选项的最常用控件之一。用户可选中或取消选中复选框,并且可一次选中任意个框。使用键盘界面时,被聚焦的复选框的状态可使用<SPACE>键切换。禁用的框显示为灰色,如下图所示,其中描述了每种可能的复选框的外观:
开启皮肤色后显示效果如下:
412 官方WIDGET_CheckBox实例
官方的这个例子做的很好,充分的演示了复选框的各个状态。这个例子在模拟器中的位置:
412 源代码如下(主要看WIDGET_Checkbox中的代码):
#include <stddefh>
#include "GUIh"
#include "DIALOGh"
#include "Mainh"
/
Static data
/
//
// Dialog resource
//
static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {(1)
{ FRAMEWIN_CreateIndirect, "Check box sample", 0, 10, 10, 300, 220, FRAMEWIN_CF_MOVEABLE},
{ TEXT_CreateIndirect, "Enabled:", 0, 5, 10, 120, 0 },
{ CHECKBOX_CreateIndirect, 0, GUI_ID_CHECK0, 5, 30, 120, 0 },
{ CHECKBOX_CreateIndirect, 0, GUI_ID_CHECK1, 5, 60, 120, 0 },
{ CHECKBOX_CreateIndirect, 0, GUI_ID_CHECK2, 5, 90, 120, 20 },
{ CHECKBOX_CreateIndirect, 0, GUI_ID_CHECK3, 5, 125, 120, 26 },
{ TEXT_CreateIndirect, "Disabled:", 0, 150, 10, 120, 0 },
{ CHECKBOX_CreateIndirect, 0, GUI_ID_CHECK4, 150, 30, 120, 0 },
{ CHECKBOX_CreateIndirect, 0, GUI_ID_CHECK5, 150, 60, 120, 0 },
{ CHECKBOX_CreateIndirect, 0, GUI_ID_CHECK6, 150, 90, 120, 26 },
{ CHECKBOX_CreateIndirect, 0, GUI_ID_CHECK7, 150, 125, 120, 26 },
{ BUTTON_CreateIndirect, "OK", GUI_ID_OK, 10, 170, 60, 20 },
{ BUTTON_CreateIndirect, "Cancel", GUI_ID_CANCEL, 225, 170, 60, 20 },
};
//
// Check box text
//
static const char _apLabel[] = {(2)
"Default",
"3 States",
"Box XL",
"Box XXL"
};
/
Static code
/
/
_cbCallback
/
static void _cbCallback(WM_MESSAGE pMsg) {
WM_HWIN hDlg;
WM_HWIN hItem;
int i;
int NCode;
int Id;
hDlg = pMsg->hWin;
switch (pMsg->MsgId) {
case WM_INIT_DIALOG:
WM_GetDialogItem(hDlg, GUI_ID_CHECK0);
for (i = 0; i < 8; i++) {(3)
int Index = i % 4;
hItem = WM_GetDialogItem(hDlg, GUI_ID_CHECK0 + i); // Get the handle of the desired checkbox
CHECKBOX_SetText(hItem, _apLabel[Index]); // Set the check box text(4)
switch (Index) {
case 1:(5)
//
// Set the number of possible states to 3
//
CHECKBOX_SetNumStates(hItem, 3);(6)
//
// Use user defined bitmaps for the third state
//(7)
CHECKBOX_SetImage(hItem, &_abmBar[0], CHECKBOX_BI_INACTIV_3STATE); // Used if widget is disabled
CHECKBOX_SetImage(hItem, &_abmBar[1], CHECKBOX_BI_ACTIV_3STATE); // Used if widget is enabled
CHECKBOX_SetState(hItem, 2);(8)
break;
case 2:(9)
CHECKBOX_SetState(hItem, 1);
//
// Use user defined bitmaps for the 'checked' state
//
CHECKBOX_SetImage(hItem, &_abmXL[0], CHECKBOX_BI_INACTIV_CHECKED); // Used if widget is disabled
CHECKBOX_SetImage(hItem, &_abmXL[1], CHECKBOX_BI_ACTIV_CHECKED); // Used if widget is enabled
CHECKBOX_SetFont(hItem, &GUI_FontComic18B_ASCII);
break;
case 3:(10)
CHECKBOX_SetState(hItem, 1);
//
// Use user defined bitmaps for the 'checked' state
//
CHECKBOX_SetImage(hItem, &_abmXXL[0], CHECKBOX_BI_INACTIV_CHECKED); // Used if widget is disabled
CHECKBOX_SetImage(hItem, &_abmXXL[1], CHECKBOX_BI_ACTIV_CHECKED); // Used if widget is enabled
CHECKBOX_SetFont(hItem, &GUI_FontComic24B_ASCII);
break;
}
//
// Disable all check boxes shown on the right side of the dialog
//
if (i >= 4) {(11)
WM_DisableWindow(hItem);
}
}
break;
case WM_NOTIFY_PARENT:
Id = WM_GetId(pMsg->hWinSrc); // Id of widget
NCode = pMsg->Datav; // Notification code
switch (NCode) {
case WM_NOTIFICATION_RELEASED: // React only if released
if (Id == GUI_ID_OK) { // OK Button
GUI_EndDialog(hDlg, 0);
}
if (Id == GUI_ID_CANCEL) { // Cancel Button
GUI_EndDialog(hDlg, 1);
}
break;
}
break;
default:
WM_DefaultProc(pMsg);
}
}
/
Public code
/
/
MainTask
/
void MainTask(void) {
#if GUI_SUPPORT_MEMDEV
WM_SetCreateFlags(WM_CF_MEMDEV);
#endif
GUI_Init();
WM_SetDesktopColor(GUI_BLACK);
while (1) {
GUI_ExecDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), &_cbCallback, 0, 0, 0);
GUI_Delay(500);
}
}
4111 复选框支持的通知代码
以下事件是复选框控件作为WM_NOTIFY_PARENT消息的一部分发送给其父窗口的:
消息 描述
WM_NOTIFICATION_CLICKED 复选框已被点击。
WM_NOTIFICATION_RELEASED 复选框已被释放。
WM_NOTIFICATION_MOVED_OUT 复选框已被点击,且指针已移出复选框并且没有释放。
WM_NOTIFICATION_VALUE_CHANGED 复选框的状态已改变。
4112 按钮支持键盘反应
如果控件具有输入焦点,则它将对下列各键做出反应:
按键 反应
GUI_KEY_SPACE 切换小工具的选中状态
emwin运行在用 emWin 开发软件时无需目标系统;大多数软件都可使用模拟器进行开发。当然,最终目的通常是能在目标系统上运行软件。
并适用于任意LCD控制器和CPU下任何尺寸的真实显示或虚拟显示。它的设计架构是模块化的,由不同的模块中的不同层组成,由一个LCD驱动层来包含所有对LCD的具体图形 *** 作。
UCGUI可以在任何的CPU上运行,因为它是100%的标准C代码编写的。UCGUI能够适应大多数的使用黑白或彩色LCD的应用,它提供非常好的允许处理灰度的颜色管理。还提供一个可扩展的2D图形库及占用极少RAM的窗口管理体系。
交互技术:
(1)定位技术:可利用鼠标器移动光标,用键盘输入坐标值,或者利用按键移动光标线来定位。
(2)选择技术:可利用鼠标点击菜单中的选项,或者用键盘输入选择项的标识,或者按对应的功能键来实现,甚至可以用语音识别器实现这种选择。
(3)文本技术:常用键盘输入字符,也可以利用语音识别软件或手写字符识别技术(如手写板)来输入。
(4)定向技术:可以直接用键盘输入角度数值,也可以利用游戏杆等直观地输入。
初学emWin的准备工作及其快速上手
俗话说万事开头难,学习一门新的知识,难的往往不是知识本身,而是如何快速上手,需要什么资料和开发环境。一旦上手后,深入的学习就相对容易些了。
本章节就起到这样的作用,主要说明初学emWin需要做的准备工作。
21 初学者重要提示
22 开发环境
23 emWin参考资料
24 emWin的调试工具emWinSPY
25总结
21 初学者重要提示
我们的第一版emWin教程已经发布2年多了,经常有初学者会反映学习emWin很长时间了,一直还没有入门,最主要的原因在于学习方法上,对于初学者来说,要优先掌握以下三点:
1、学会emWin相关资源的获取方法,做到心中有数,要不心里老是没底。
2、学习emWin模拟器的使用。利用模拟器做前期的界面调试非常方便,可以大大降低界面的设计时间。另外就是学习模拟器中配套的大量参考例子的运行方法,这些参考例子极具参考价值。
3、学习GUIBuilder和uCGUIBuilder两款界面创建小工具的使用。通过这两个小工具,使得界面创建和排版布局变得很容易,一定程度上加快了界面的创建。
掌握了这三点后,一定要做大量实例的练习,因为实战才是学好emWin的最佳捷径,待有一定基础后,使用中只需查阅手册即可。另外,初学时不要一上来就研究emWin的底层驱动接口,比较影响初学的积极性,搞得后面越来越没有兴趣去研究了。
22 开发环境
1、模拟器开发环境推荐使用VC60,其它的VS2008,VS2010,VS2013也可以,其余的VS版本未做测试。
2、IDE:支持两种IDE开发环境,MDK和IAR
(1)MDK47X或者MDK5XX均可,MDK47X以下的版本不行,因为低版本不支持STM32F429。
(2)IAR固定使用IAR75版本,由于IAR向下兼容性稍差,其它版本未做支持。
3、调试器使用J ,U 或者S 均可
4、配套开发板是安的:S V6开发板,MCU是S 。
23 emWin参考资料
231 S官方的英文版emWin用户手册
当前版本是emWin534(如果官方升级了新版本,大家使用最新版本即可,手册都是向下兼容的)。
232 周立功翻译的emWin512中文版用户手册
虽然中文版的版本有些低,但是对于初学者来说,这个版本已经够用了。大家可以在电子论坛进行下载。待emWin入门后,要逐渐的适应英文版的手册,512版本的中文版已经不够用了,很多新发布的控件都没有介绍。
23 emWin参考资料
231 S官方的英文版emWin用户手册
当前版本是emWin534(如果官方升级了新版本,大家使用最新版本即可,手册都是向下兼容的)。
232 周立功翻译的emWin512中文版用户手册
虽然中文版的版本有些低,但是对于初学者来说,这个版本已经够用了。大家可以在电子论坛进行下载 。待emWin入门后,要逐渐的适应英文版的手册,512版本的中文版已经不够用了,很多新发布的控件都没有介绍。
233 emWin模拟器的下载
emWin模拟器当前版本是emWin532。另外注意,下载模拟器是需要用户注册了S官网的账号后才可以下载。
细心的读者会发现手册是534版本,但是模拟器怎么是532版本?这是没有问题的,因为官网没有及时更新。另外本教程模拟器的使用是以532版本为基础的,如果官方升级了新版,并且模拟器做了修改,我们论坛进行了备份,下载地址:>
下面以STM32CubeF4 V1130为例,打开路径:STM32Cube_FW_F4_V1130\Middlewares\ST\StemWin可以看到如下文件,这些文件就是emWin软件包的内容:
24 emWin的调试工具emWinSPY
emWinSPY是一款比较实用的emWin调试软件。
emWinSPY是从52x版本才开始有的,但这个版本仅支持网口调试。网口调试有些麻烦,我们不考虑这种调试方式。到了emWin532版本开始支持JLINK调试了,但是测试发现emWin532版本无法使用emWinSPY,缺少函数定义,编译后会出现如下问题:
根据以往的经验(比如emWin多点触摸功能首次发布时也是缺少函数定义,待升级了几个版本后,可以正常使用了),估计会在后面的emWin版本中将这个功能开放出来,下面是emWinSPY的显示效果:
25 总结
本章节就为大家讲解这么多,建议初学者花些时间对emWin的用户手册了解一下,随着以后的学习最好可以达到熟练查看这个手册的程度。
以上就是关于emwin中checkbox怎么用全部的内容,包括:emwin中checkbox怎么用、emwin运行在哪里、求教学习emwin的方法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)