minigui:mGNCS简介塈设置控件(widget)enable/disable

23 篇文章 0 订阅
23 篇文章 11 订阅

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);
        }
    }
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

10km

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值