minigui:mGNCS简介塈设置控件(widget)enable/disable
mGNCS
在 miniStudio 的开发中,为实现可视化图形界面的设计,飞漫软件在 MiniGUI 现有接口基础上,开发了一套新的控件集。miniStudio 引入的新控件集是在原 MiniGUI 控件集基础上发展而来的,为与 MiniGUI 固有控件集(Intrinsic Control Set)区别,称为“新控件集(New Control Set,简称 mGNCS)”。
基于miniStudio开发UI界面更加方便,UI设计的同时自动生成c代码框架,真正实现了所见即所得(WYSIWYG).
mGNCS
独立于minigui的核心库libminigui
,
源码下载地址:http://www.minigui.org/downloads/libmgncs-1.0.8.tar.gz
在ubuntu下如果参照下面的说明ap-get方式安装minigui开发环境:
http://wiki.minigui.com/twiki/bin/view/Products/MiniGUIUMV32P01 mGNCS
会含在libminigui-ths-dev
package中与libminigui
一并安装
关于mGNCS
的相关技术手册参见mnigui官网:
在线帮助(中文): http://wiki.minigui.com/twiki/bin/view/Products/MStudioMGNCSV1dot0PG
离线PDF(中文):http://www.minigui.com/docs/MGNCS-PROG-GUIDE-V1.0-C.pdf
更多参见:http://wiki.minigui.com/twiki/bin/view/Products/WebHome#MiniGUI_Components
设置控件enable/disable
如果是基于libminigui核心库的API设置控件enable/disable,一般应该是像下面这样,调用SendNotifyMessage
函数发送MSG_ENABLE
消息
void ui_widget_enable(mWidget *widget,BOOL enable){
if(widget){
SendNotifyMessage(widget->hwnd,MSG_ENABLE,(WPARAM)enable,(LPARAM)NULL);
}
}
基于mGNCS
控制控件的enable/disable与基于libminigui不同。 libmgncs-1.0.8
源码文件夹下搜索NCSN_WIDGET_DISABLED
即能找对于MG_ENABLE
消息的处理逻辑
$ grep -rn –include *.c NCSN_WIDGET_DISABLED .
./src/mwidget.c:550: ncsNotifyParent(self, wParam?NCSN_WIDGET_ENABLED:NCSN_WIDGET_DISABLED);
代码如下
可以看到调用PostMessage
函数发送MSG_ENABLE
消息还是会被转为通过ncsNotifyParent
函数发送NCSN_WIDGET_ENABLE/DISABLE
消息,相当于多绕了一层。
如果要减少消息转的环节,对mWidget控件,设置enable/disable应该如下操作:
#include <minigui/common.h>
#include <minigui/minigui.h>
#include <minigui/gdi.h>
#include <minigui/window.h>
#include <mgncs/mgncs.h>
#include "resource.h"
#include "ncs-windows.h"
// 设置widget的enable属性
void ui_widget_enable(mWidget *widget,BOOL enable){
if(widget){
if(enable){
ExcludeWindowStyle(widget->hwnd, WS_DISABLED);// WS_DISABLED标志置0
}else{
IncludeWindowStyle(widget->hwnd, WS_DISABLED);// WS_DISABLED标志置1
}
// 调用ncsNotifyParent前必须调用ExcludeWindowStyle/IncludeWindowStyle修改窗口style,
// 否则调用无效
enum mWidgetNotify msg = enable ? NCSN_WIDGET_ENABLED : NCSN_WIDGET_DISABLED;
ncsNotifyParent(widget,msg);//向 widget发送NCSN_WIDGET_ENABLE/DISABLE消息
}
}
// 设置widget的子控件enable属性
void ui_child_enable(mWidget *widget,int childId,BOOL enable){
if(widget){
// 根据ID获取当前窗口中的子控件对象
mWidget* child = ncsGetChildObj(widget->hwnd,childId);
if(child){
ui_widget_enable(child,enable);
}
}
}
上一篇: AE怎么制作漂亮的烟花绽放的动画效果?