emwin中checkbox怎么用
解决方法,既然 Vue 将绑定的事件作为内联语句处理了,那么可以使用内联语句 receiveData(prodMoneyOff)($event) 来达到想要的结果。
若需要处理多个参数,需要注意在子组件中 $emit 事件时传递一个包含多个属性的对象!
翻看了emwin关于edit的官方例程,得到一点启示:
为listbox控件自定义一个回调函数,通过回调函数捕获ENTER键值,并自定义一个消息发给主窗口。
在官方edit例程中,自定义的回调函数是这样处理的:
/*********************************************************************
*
* _cbEdit
*/
static void _cbEdit(WM_MESSAGE * pMsg) {
const WM_KEY_INFO * pInfo;
WM_MESSAGE Msg;
switch (pMsg->MsgId) {
case WM_KEY:
pInfo = (WM_KEY_INFO *)pMsg->Data.p;
if (pInfo->Key == GUI_KEY_ENTER) {
if (pInfo->ressedCnt == 0) {
Msg.MsgId = WM_APP_SHOW_TEXT;
Msg.hWinSrc = pMsg->hWin;
WM_SendMessage(WM_HBKWIN, &Msg);
return;
}
}
}
EDIT_Callback(pMsg);
}
复选框是选择各种不同选项的最常用控件之一。用户可选中或取消选中复选框,并且可一次选中任意个框。使用键盘界面时,被聚焦的复选框的状态可使用<SPACE>键切换。禁用的框显示为灰色,如下图所示,其中描述了每种可能的复选框的外观:
开启皮肤色后显示效果如下:
41.2 官方WIDGET_CheckBox实例
官方的这个例子做的很好,充分的演示了复选框的各个状态。这个例子在模拟器中的位置:
41.2 源代码如下(主要看WIDGET_Checkbox中的代码):
#include <stddef.h>
#include "GUI.h"
#include "DIALOG.h"
#include "Main.h"
/*********************************************************************
*
* 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->Data.v; // 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);
}
}
41.1.1 复选框支持的通知代码
以下事件是复选框控件作为WM_NOTIFY_PARENT消息的一部分发送给其父窗口的:
消息 描述
WM_NOTIFICATION_CLICKED 复选框已被点击。
WM_NOTIFICATION_RELEASED 复选框已被释放。
WM_NOTIFICATION_MOVED_OUT 复选框已被点击,且指针已移出复选框并且没有释放。
WM_NOTIFICATION_VALUE_CHANGED 复选框的状态已改变。
41.1.2 按钮支持键盘反应
如果控件具有输入焦点,则它将对下列各键做出反应:
按键 反应
GUI_KEY_SPACE 切换小工具的选中状态
如果你以前做过点阵式的LCD屏,或是TFT屏幕的菜单,以及显示效果设计,如果你曾经为了改善图标的摆放位置,以及优化整体界面的搭配显示效果,而不停的修改代码,烧录,运行,再修改的话,那么你还是用上emWin吧。
如果你用过MicroSoft的Visual studio,那么这里就让你体会一下,如何用类似的思路,可见即所得的思路,来设计整个仪表的界面。
首先要请出emWin的另外一个工具软件 - emWinGUIBuilder。GUIBuilder应用程序是一款无需使用C编程语言即可创建对话框的工具,并且提供了丰富的控件。控件的摆放的位置以及控件本身的大小,都可通过拖放操作来实现,而无需编写源代码。根据上下文菜单,能添加其他各种属性。对这些控件的属性进行编辑后,就能实现对控件属性的调整。该操作无需使用C 编程语言。对话框可以另存为C 文件,并可以在emWin中直接加载。并可以通过修改该C文件,来增强功能。并且还提供了相应的事件处理框架,让客户完全注重在事件的处理上,而不是限于整个界面的设计上。
好了,那我们举个最简单的例子,来操作一下。
硬件准备:GG DK 3750
软件准备:GG DK 3750 -> Example -> guidemo,因为这个demo可以support touch。。这样就可以操作控件了。
1. 设计界面:
a. 打开energymicro\reptile\emwin\exe文件下的GUIBuilder.exe
b. 大家会在上面看到一排的控件。点击Window控件,创建一个窗口。并在属性窗口中设置窗口的大小为320*240,即xSize,ySize。
c. 然后依次在Window窗口,加入两个Button,两个Check,一个Progbar控件。并修改控件相应的属性。例如Button的Name属性,以及CheckBox的Label属性。
d. 控件的对齐,可以通过调整控件属性当中的xPos,yPos。
e. 如此,一个最简单的界面就设计完成了。其目的就是想通过Button及checkBox,来控制DK板子上的LED等。顺便熟悉整个事件响应的框架。
f. 点击File -> Save,生成WindowDLG.c文件。
2. 程序修改以及增加事件响应函数
a. 打开guidemo工程。为了可以操作DK上的LED灯,需要在添加bsp_dk_leds.c, 这个文件在energymicro\kits\common\bsp文件夹下。
b. 将WindowDLG.c拷贝到工程energymicro\kits\EFM32GG_DK3750\examples\guidemo目录下
c. 打开GUIDEMO.c中,包含WindowDLG.c ,并修改main函数。代码如下所示:
#include "GUI.h"
#include "WindowDLG.c"
int main(void)
{
GUI_Init();
PROGBAR_SetDefaultSkin(PROGBAR_SKIN_FLEX);
WM_HWIN hWin;
hWin = CreateWindow();
PROGBAR_Handle hProg;
hProg = WM_GetDialogItem(hWin, ID_PROGBAR_0);
PROGBAR_SetValue(hProg, 0);
PROGBAR_SetMinMax(hProg, 0, 5000);
unsigned long ulDelay = 0;
while(1)
{
GUI_Delay(10);
ulDelay = ulDelay + 10;
if(ulDelay > 5000)ulDelay = 0;
PROGBAR_SetValue(hProg, ulDelay);
}
}
d. 打开WindowDLG.c,在里面static void _cbDialog(WM_MESSAGE * pMsg)函数里面增加事件响应,例如:
case ID_BUTTON_0: // Notifications sent by 'LED1'
switch(NCode) {
case WM_NOTIFICATION_CLICKED:
static unsigned char ucFlag = 0;
ucFlag = !ucFlag;
if(ucFlag)
{
BSP_LedSet(1);
}
else
{
BSP_LedClear(1);
}
break;
e. 其他控件也如此类推。上面的两段函数中,都出现了ID_XXX,如ID_PROGBAR_0,ID_BUTTON_0,这个是控件的标识符。ID顾名思义就是类似于身份证了。Visual Studio中也有类似的概念。
f. 最后就是ProgBar的操作,稍微复杂一些。所有的函数,在手册里面都可以查得到的。。呵呵。
以下是运行起来的照片。这个demo,是最简单的一个demo,但是无论都复杂的demo,如果拆分开来,都是由简单的组合而成的。因此,只要跨过这道门槛,也就为将来铺平了道路。
如下是视频:
http://v.youku.com/v_show/id_XNTAzOTc3NzE2.html
由于这个是根据今天的回忆写的,怕有忘记的部分,所以把guidemo这个也上传了。可以参考,如果后续要做项目的话,还是建议重新新建一个工程来做,比较好。
中国移动信号强度是多少?
取值范围:0~30,值越大越好RSRQ(ReferenceSignalReceivedQuality参考信号接收质量):M*RSRP\/RSSI,其中M为RSSI测量带宽内的RB数,即为系统带宽内的RB总数。反映和指示当前信道质量的信噪比和干扰水平。RSRQ:(ReferenceSignalReceivedQuality)主要衡量下行特定小区参考信号的接收质量。和WCDMA中CPICHEc\/Io作用...
中国移动的信号强度如何衡量?
取值范围:0~30,值越大越好RSRQ(ReferenceSignalReceivedQuality参考信号接收质量):M*RSRP\/RSSI,其中M为RSSI测量带宽内的RB数,即为系统带宽内的RB总数。反映和指示当前信道质量的信噪比和干扰水平。RSRQ:(ReferenceSignalReceivedQuality)主要衡量下行特定小区参考信号的接收质量。和WCDMA中CPICHEc\/Io作用...
中国联通cdma的信号强度
取值范围:0~30,值越大越好RSRQ(ReferenceSignalReceivedQuality参考信号接收质量):M*RSRP\/RSSI,其中M为RSSI测量带宽内的RB数,即为系统带宽内的RB总数。反映和指示当前信道质量的信噪比和干扰水平。RSRQ:(ReferenceSignalReceivedQuality)主要衡量下行特定小区参考信号的接收质量。和WCDMA中CPICHEc\/Io作用...
中国移动网络的接收信号质量指标是多少?
取值范围:0~30,值越大越好RSRQ(ReferenceSignalReceivedQuality参考信号接收质量):M*RSRP\/RSSI,其中M为RSSI测量带宽内的RB数,即为系统带宽内的RB总数。反映和指示当前信道质量的信噪比和干扰水平。RSRQ:(ReferenceSignalReceivedQuality)主要衡量下行特定小区参考信号的接收质量。和WCDMA中CPICHEc\/Io作用...
中国移动的网络质量好吗?
取值范围:0~30,值越大越好RSRQ(ReferenceSignalReceivedQuality参考信号接收质量):M*RSRP\/RSSI,其中M为RSSI测量带宽内的RB数,即为系统带宽内的RB总数。反映和指示当前信道质量的信噪比和干扰水平。RSRQ:(ReferenceSignalReceivedQuality)主要衡量下行特定小区参考信号的接收质量。和WCDMA中CPICHEc\/Io作用...
中国移动rsrq是什么?
取值范围:0~30,值越大越好RSRQ(ReferenceSignalReceivedQuality参考信号接收质量):M*RSRP\/RSSI,其中M为RSSI测量带宽内的RB数,即为系统带宽内的RB总数。反映和指示当前信道质量的信噪比和干扰水平。RSRQ:(ReferenceSignalReceivedQuality)主要衡量下行特定小区参考信号的接收质量。和WCDMA中CPICHEc\/Io作用...
First Day Of My Life
I’m searching for the way to tell,take it or leave it –what, I don’t know.It’s just an alchemist’s spell Or perhaps a lie What you gave me is gone No, don’t hide away No, you can only live by taking risks Oh ... ask yourself why I can hear your voice R...
jvc\/杰伟世 gy-ls300chec 4k怎么样
如果是真品,相当不错!高品质全尺寸头戴式耳机 产品特点 高品质40mm驱动单元 双向转动设计佩戴更舒适 2.5m连接线、镀金插头 6.3mm转换插头 商品规格HA-RX300 驱动单元40mm 驱动磁铁钕磁铁 频率响应12-22,000Hz 阻抗 灵敏度100dB\/1mW 最大输入能力1200mW(IEC)线长2.5m 重量(不含线)194g 插头...
泰度龙化: 建议: 1.打开上面介绍的制作好的汇总报表的工作簿,单击“工具”菜单中的“共享工作簿”选项;在“共享工作簿”对话框中单击“编辑”选项卡;选中“允许多用户同时编辑,同时允许工作簿合并”复选框;单击“高级”选项卡,在“修订”栏中选定“保存修订记录”单选按钮,然后在文本框中输入天数(根据报表修改及报送时间设定),单击“确定”按钮;
通河县15519729506: asp中checkbox怎么用 - ?
泰度龙化: 多个checkbox使用相同的name值即可,例如 <input type="checkbox" name="abc" value="1" /> <input type="checkbox" name="abc" value="2" /> <input type="checkbox" name="abc" value="3" />如果需要id属性,id可以不同,不会影响多选.
通河县15519729506: 如何用按键来选中emwin界面中的按键 - ?
泰度龙化: 翻看了emwin关于edit的官方例程,得到一点启示: 为listbox控件自定义一个回调函数,通过回调函数捕获ENTER键值,并自定义一个消息发给主窗口.在官方edit例程中,自定义的回调函数是这样处理的: /******************************************...
通河县15519729506: c# checkbox 的用法? - ?
泰度龙化: 在后台设置checkbox.Checked=true 或者在前台设置属性Checked="true"都可以.
通河县15519729506: checkbox(html)中的用法! - ?
泰度龙化: 哎,还是我来试试吧. ~~弱弱地出手了~~<input id="ckBefor" type="checkbox" onclick="document.getElementById('ckAfter').checked=this.checked?false:true;" />修改后所以数据选用该系数 <input id="ckAfter" checked="checked" type="checkbox" onclick="document.getElementById('ckBefor').checked=this.checked?false:true;" />献丑了~~
通河县15519729506: checkbox的value值是干嘛用的?如何使用? - ?
泰度龙化: 在做网站时,需要实现某条新闻的编辑功能,这样就要先从库中读取出这条新闻的状态(即是否置顶),显示给用户,让用户决定是否修改这条新闻的状态,我是用一个复选框checkbox来完成的,部分代码如下(其中n_istop为是否置顶标识,1...
通河县15519729506: vb中的checkbox如何使用 - ?
泰度龙化: checkbox传递一个布尔值,不选中为“false",同时也为“0”,选中时值为“true”,同时也为“1” 在检测其值时,这样判断:if request.form("checkboxname") = true then... 或 if request.form("checkboxname") = 1 then...if request.form("checkboxname") = false then... 或 if request.form("checkboxname") = 0 then...
通河县15519729506: vba checkbox运用 - ?
泰度龙化: 建立checkbox1数组,然后循环判断 If Check1(0).Value = 1 Then textbox1.text=checkbox1(0).caption ElseIf Check1(1).Value = 1 Then textbox1.text=checkbox1(1).caption ElseIf Check1(2).Value = 1 Then textbox1.text=checkbox1(2).caption ElseIf Check1(3).Value = 1 Then textbox1.text=checkbox1(3).caption End If
通河县15519729506: winform中有个CheckBox当选中时,打开一个Web网页.当关闭web网页时如何通知winform将CheckBox置为false.?
泰度龙化: 你要的功能很难实现.因为普通的Web浏览器和WinForms应用程序很难交互.除非浏览器你自己做. vb.net中你可以选择.WebBrowser控件来实现. 在您的项目中新建一个Windows窗体.在窗体内拖放一个WebBrowser控件.设置...
通河县15519729506: c#checkbox控件怎么用呀? - ?
泰度龙化: CheckBox有一个CheckChanged事件的,你要去实现这个方法,然后当点击不同意的时候,让Button的Enable属性设置为false就OK