|
限于水平有限,也是新手,最近搞了几天spinbox,发现这个控件显示效果有限,但是可以自己扩展很多,大神可以自动忽略。如果有同样和我一样新手,可以参考一下。
spinbox控件显示可以显示整数,而且,如果范围是2位数,实际显示了1位数,前面就会出现0自动补齐,实际上并不好看
我使用的是我使用笨方法,获得
hItem = WM_GetDialogItem(pMsg->hWin, ID_SPINBOX_0);
SPINBOX_SetRange(hItem,1,100);
SPINBOX_SetValue(hItem, value);//设置控件实际只
Dis_Spinbox(hItem, value); //显示结果
void Dis_Spinbox(SPINBOX_Handle hObj,u16 value)//自己增加的函数,用来显示控件数值
{
char buff[10]="";
EDIT_Handle hEdit;
hEdit = SPINBOX_GetEditHandle(hObj);//返回附加的 EDIT 控件的句柄
sprintf(buff,"%d",value);
EDIT_SetText(hEdit, buff);
}
我是通过获得 EDIT 控件来操作spinbox 的显示。
同样的,如果你想显示带小数点的,也可以这么显示操作。
不过需要注意的是,当你的数据发生修改,也要同步修改显示值,在默认的回调函数处理里WM_NOTIFY_PARENT消息里,也要更新。
case ID_SPINBOX_0: // Notifications sent by 'S_spo2_l'
switch(NCode) {
case WM_NOTIFICATION_VALUE_CHANGED:
hItem = WM_GetDialogItem(pMsg->hWin, ID_SPINBOX_0);
Dis_Spinbox(hItem,SPINBOX_GetValue(hItem));
break;
如果你想显示浮点类型,必须要将显示的数据变量乘以10倍,显示时再强转成浮点值显示,因为spinbox控件只会对内容加减1.
这种方法可以是万能的。
碰到最复杂的显示,是想通过spinbox显示校准值,显示效果从-1.0-+1.0,浮点,带正负号,还要通过实体按键修改。我是这么操作的。
初始化时:
hItem = WM_GetDialogItem(pMsg->hWin, ID_SPINBOX_1);
SPINBOX_SetRange(hItem,-10,10);//设置的范围必须是整数
Dis_Signed_Temp(hItem, value); //设置显示的值,value变量是想要显示的值的10倍。显示0.1就必须是1,带符号浮点型
hEdit = SPINBOX_GetEditHandle(hItem);
EDIT_SetFloatMode(hEdit,(float)value/10.0,-1,1,1,GUI_EDIT_SIGNED);//设置为文本浮点模式
void Dis_Signed_Temp(SPINBOX_Handle hObj,signed short int value)
{
EDIT_Handle hEdit;
hEdit = SPINBOX_GetEditHandle(hObj);
EDIT_SetFloatValue(hEdit,value/10.0);
}
对应的回调里也要增加
case WM_NOTIFICATION_VALUE_CHANGED:
hItem = WM_GetDialogItem(pMsg->hWin, ID_SPINBOX_1);
Dis_Signed_Temp(hItem,SPINBOX_GetValue(hItem));
break;
实际上 EDIT 控件自带Float类型,只要直接调用,不用使用sprintf也可以。 |
评分
-
查看全部评分
|