Specification for the mGNCS-compliant Widget Components
Terms
MiniGUI new control set (mGNCS). The new control set not only realizes multiple customizable and extensible control classes, but also realizes resources management function, and object-oriented encapsulation for other common functions, such as main window, dialog box and menu etc.
Style. Symbol used for controlling window or control basic look and feel and behavior.
Control style of the new control set, only used for control properties that cannot be modified dynamically, such as if the progress bar is vertical or horizontal can be realized with style. In the realization of all the controls, use of style shall be reduced as much as possible.
Besides system global styles such as
WS_
andWS_EX_
etc. are reserved, the control styles defined by MiniGUI intrinsic control set are not used in the new control set. Control styles in the new control set will be defined again.In the new control set, control no longer has extension style.
Property. Control property is a newly added concept, which is used for the control features that can be dynamically set (such as caret location in the edit box) or dynamically changed (such as list item number in the list box). mGNCS provides uniform interface (
getProperty
/setProperty
) to get or set property of control.Renderer. In mGNCS, it refers to the drawing method set of controlling the main window or control look and feel, the full name is “look and feel renderer”, generally referred to as “renderer” in short.
In the new control set, each visible control will have its own renderer. In order to distinguish from renderers introduced by MiniGUI 3.0, we refer to the renderers of MiniGUI 3.0 as “global renderer”, and the renderers introduced by the new control set is referred to as “control renderer”:
The global renderer acts on the main window, old control set and system components of the new control set (such as non client area elements such as border, title bar and scroll bar etc.).
Control renderer only acts on the client area drawing of each control of the new control set.
Window class name. In order to distinguish from the name of control class, we refer to the class name used by MiniGUI for child window as “window class name”. For example, control class name of static box is
mStatic
, while the window class name of static box isstatic_
.Event. In the traditional programming mode of MiniGUI, there exist two concepts, message and notification; they have their own effect, but for application developers, the nature of notification is the same as that of the message. Therefore, mGNCS abstracts the message and notification as event. Looking from the angle of application developers, each event correspond to an event handler.
Interface Naming Norm of the New Control Set
Interface naming of the new control set is usually related to the name of class, therefore, in the later norm description, the all lower case letter mode, all capital letter mode, lower case and capital letter mixture mode and capital letter abbrev mode of the class name are represented by <classname>
, <CLASSNAME>
, <ClassName>
, and <CLSNM>
.
Class name (refers to containing method, which is structure of function pointer). Although the new control adopts C language to realize, because OOP idea is adopted, the mode of capital letter and lower case letter mixture is adopted to represent the name of “class”, and lower case letter m is used as prefix, such as
mWidget
and correspondingmWidgetClass
.General structure. Use all capital letter modes similar to MiniGUI interface to name, and use
NCS<CLSNM>_
as the prefix.Naming rules for functions and parameters
The new control set newly adds global general function, and uses
nc
as the function name prefix. Afterwards, it is the verb object phrase describing the function function, and the method of capital letter and lower case letter mixture is used to name, such asncsCreateWindow
.Function interface facing the control developers, the first parameter shall be
mWidget*
or corresponding child class type pointer.Method naming of the control class: verb object phrase, word link writing, except the first word, the first letter of other words is capital letter, such as
void (*moveContent) (mWidget *)
.Naming norm for the message callback function in control class is:
on<MessageName>
,such asvoid (*onSetFocus) (mWidget *)
.Parameter sequence and engagement of control message: according to the message criteria defined by MiniGUI, define its sequence and name.
Naming norm for control renderer interface is:
<className>Renderer
.Internal function parameter engagement of renderer interface: the first is
mWidget*
or corresponding child class type pointer, and the second parameter is generallyHDC
.In the new control set, for the functions equivalent to C++ member function, pointer variable representing the object is named as
self
, while the class pointer that the object corresponds to is_class
.For the parameter names in the function interface, Java JDK style is adopted to name (the first word is all lower case letter, and afterwords, they are all capital letter and lower case letter mixture), and Hungarian naming method is no longer used.
Read only pointer parameter type and returned value type must use
const
key word for modification.
Window class name. In order to avoid confliction with the window class name of the old control set, the new control set uses under line (
_
) as the suffix of window class name, such asstatic_
. The reason for not using prefix is to try to avoid hash conflict under the algorithm of existing MiniGUI core management window class code. For the C language macro name of window class name,NCSCTRL_
is used as prefix, such asNCSCTRL_STATIC
.
It needs to be noted that because we adopt C language to realize rule-oriented feature similar to C++ language. In order to avoid unnecessary errors, we need to obey the naming norm as grammar norm, the purpose is:
Simplify programming through all kinds of macros.
Convenient for fixing programming mode through macro, according to fixed programming mode, it is easy to read and realize and not easy to make mistakes.
Generation and index of compiled documents.
Reduce study time of the developers to the maximum extent.
Defining Rule for the Class Name and Its Identifier
The table below gives the class name, corresponding window class name and their abbrevs
Class name
C class name
Window classname
Class name abbrev CLSNM
Remark
Super class
mObject
-
OBJ
Non control class, the most foundational class in NCS class hierarchical relations
List item basic class
mItem
-
ITEM
Non control class, used to state the foundation class of list item
List item manager
mItemManager
-
ITMMNG
Non control class, used to manage the method class of list item set
Column information class
mListColumn
-
LSTCLM
Non control class, describes column information class
Row list item class
mListItem
-
LSTITM
Non control class, manages list item set in a row
Component basic class
mComponent
-
CMPT
Non control class
Invisible component basic class
mInvsbComp
-
IVCMPT
Non control class
Timer
mTimer
-
TIMER
Non control class
Control basic class
mWidget
widget_
WIDGET
Static box
mStatic
static_
STATIC
Image box
mImage
image_
IMAGE
Rectangular box
mRect
rect_
RECT
Led label
mLEDLabel
ledlabel_
LEDLBL
Group box
mGroupBox
groupbox_
GRPBOX
Button group
mButtonGroup
buttongroup_
BTNGRP
Button
mButton
button_
BUTTON
Check button
mCheckButton
checkbutton_
CHKBTN
Single selection button
mRadioButton
radiobutton_
RDOBTN
Panel
mPanel
panel_
PANEL
Combination box
mCombobox
combobox_
CMBOX
Main window
mMainWnd
mainwnd_
MNWND
Dialog box
mDialogBox
dialogbox_
DLGBOX
Scrollable basic class
mScrollWidget
scrollwidget_
SWGT
Container
mContainer
container_
CTNR
Property page
mPage
page_
PAGE
List basic class
mItemView
itemview_
ITEMV
List type
mListView
listview_
LISTV
Icon type
mIconView
iconview_
ICONV
Scroll type
mScrollView
scrollview_
SCRLV
List box
mListBox
listbox_
LSTBOX
Progress bar
mProgressBar
progressbar_
PRGBAR
Property sheet
mPropSheet
propsheet_
PRPSHT
Slider basic class
mSlider
slider_
SLIDER
Slide bar
mTackBar
trackbar_
TRKBAR
Spinner basic class
mSpinner
spinner_
SPNR
Spin box
mSpinBox
spinbox_
SPNBOX
Separator
mSeperator
seperator_
SPRTR
Month calendar
mMonthCalendar
monthcalendar_
CDR
Animation
mAnimation
animation_
ANMT
Tool bar
mToolBar
toolbar_
TLBAR
Scroll bar
mScrollBar
scrollbar_
SCRLBR
Edit box basic class
mEdit
edit_
EDIT
Single line edit box
mSLEdit
sledit_
SLEDIT
Multi line edit box
mMLEdit
mledit_
MLEDIT
Naming rule for the identifier is as below:
Window class name identifier. In order to avoid confliction with the identifier of the old control set, the new control set uses
NCSCTRL_<CLASSNAME>
as the window class name identifier.Control style identifier. In order to avoid confliction with the style name of the old control set, the new control set uses
NCSS_<CLSNM>_
as the prefix of the style identifier.Control property identifier. The new control set uses
NCSP_<CLSNM>_
as the prefix of control property identifier.Control notification code identifier. In order to avoid confliction with the notification code name of the old control set, the new control set uses
NCSN_<CLSNM>_
as the prefix of control notification identifier.Class specific data identifier. The new control set uses
NCSSPEC_<CLSNM>_
as the identifier prefix of class specific data, and specific data ofmObject
class usesNCSSPEC_OBJ_
as the prefix.Parameter of class method and symbol and status used by the returned value etc. The new control set uses
NCSF_<CLSNM>_
as the prefix of this identifier.Return value identifier of function interface and class method. The new control set uses
NCSE_<CLSNM>_
as the prefix of the identifier.Other identifiers. Besides the above identifiers, identifiers of other types are determined with reference to the above method.
Defining Rule of Control Style Identifier
In the new control set, number of control styles shall be kept to the minimum, and the value range of the control style is 0x00000000 ~ 0x0000FFFF, so as to avoid confusion with the window style defined by MiniGUI.
Defining Rule of Control Property Identifier
Rule of control property identifier:
In the direct inheritance relation, value of property identifier cannot be repeated, that is, property identifier of the child class cannot cover the property identifier of the parent class and its ancestor.
In the collateral inheritance relation, property identifier can be repeated, that is, property identifier of a control class can be repeated with the property identifier of its brother control class.
In technology, enumeration type of C language is utilized to define the property identifier. For the property identifier prefixes of the controls, see the table above.
In the property identifier enumeration variable of each control, the last item is defined as
NCSP_<CLSNAM>_MAX
.Property identifier of each control is defined from the value of the maximum property identifier of its parent class plus one.
Define each property by sequence by utilizing the feature of enumeration being able to plus one automatically.
For example:
// mWidget
enum mWidgetProp {
NCSP_WIDGET_RDR,
NCSP_WIDGET_MAX
};
// mStatic
enum mStaticProp {
NCSP_STATIC_HALIGN = NCSP_WIDGET_MAX + 1,
NCSP_STATIC_VALIGN,
NCSP_STATIC_MAX
};
Defining Rule of Control Notification Code
Rule for control notification code is similar to the rule for property identifier. But it needs to be noted that in mGNCS, 0 cannot be used as the notification code.
Function Library and Head File of the New Control Set
Although mGNCS is introduced in the process of developing miniStudio, it can be used singularly as a component in MiniGUI 3.0. Therefore, we manage the new control set as a component of MiniGUI, and name it mGNCS. Name of the function library is libmgncs
, and the current edition is 1.0.0. The head file is stored under mGNCS/ directory of the system head file path, and the main head file name is mGNCS.h.
Current mGNCS defines a lot of universal controls, and in the near future, we will form extension control set aiming at specific field based on the current mGNCS. Then, an independent function library will be formed, and it is named by adopting libmgncs4*
, and the head file will be still stored under mgncs/
directory of the system head file path.
<< Public Structures and Definitions of mGNCS | Table of Contents
Last updated