mirror of
https://github.com/VincentWei/minigui-docs.git
synced 2025-10-19 02:43:23 +08:00
1147 lines
31 KiB
Markdown
1147 lines
31 KiB
Markdown
# Edit Box and Derived Control
|
|
|
|
- [Brief Introduction to Edit Box Control](#brief-introduction-to-edit-box-control)
|
|
- [`mEdit`](#medit)
|
|
+ [Style of `mEdit`](#style-of-medit)
|
|
+ [Property of `mEdit`](#property-of-medit)
|
|
+ [Event of `mEdit`](#event-of-medit)
|
|
+ [Method of `mEdit`](#method-of-medit)
|
|
- [`mSlEdit`](#msledit)
|
|
+ [Style of `mSIEdit`](#style-of-msiedit)
|
|
+ [Property of `mSIEdit`](#property-of-msiedit)
|
|
+ [Event of `mSIEdit`](#event-of-msiedit)
|
|
+ [Method of `mSIEdit`](#method-of-msiedit)
|
|
+ [Programming Example of `mSIEdit`](#programming-example-of-msiedit)
|
|
+ [Style of `mMIEdit`](#style-of-mmiedit)
|
|
+ [Property of `mMIEdit`](#property-of-mmiedit)
|
|
+ [Event of `mMIEdit`](#event-of-mmiedit)
|
|
+ [Method of `mMIEdit`](#method-of-mmiedit)
|
|
+ [Programming Example of `mMIEdit`](#programming-example-of-mmiedit)
|
|
|
|
|
|
## Brief Introduction to Edit Box Control
|
|
|
|
Edit box control is one of the essential controls in GUI system, which is
|
|
mainly used to receive character input of the users and realize the function of
|
|
user interaction and text edition. In Realization, it is divided into single
|
|
line edit and multi-line edit. Single line edit box is used to receive single
|
|
line text input with comparatively simple user content, in comparison,
|
|
multi-line text is used to receive complicated and large volume of text input.
|
|
|
|
- Class hierarchical relation of edit box
|
|
- [`mWidget`](MiniGUIProgGuidePart2Chapter04.md#mwidget)
|
|
* [`mScrollWidget`](MiniGUIProgGuidePart2Chapter08.md#mscrollwidget)
|
|
* [`mItemView`](MiniGUIProgGuidePart2Chapter15.md)
|
|
* [`mScrollView`](MiniGUIProgGuidePart2Chapter15.md)
|
|
* [`mEdit`](MiniGUIProgGuidePart2Chapter13.md#medit)
|
|
* [`mSlEdit`](MiniGUIProgGuidePart2Chapter13.md#msledit)
|
|
* [`mMlEdit`](MiniGUIProgGuidePart2Chapter13.md#mmledit)
|
|
|
|
- Example diagram
|
|
|
|

|
|
|
|
## `mEdit`
|
|
|
|
- *Control window class*: `NCSCTRL_EDIT`
|
|
- *Control English name*: Edit
|
|
- *Brief introduction*: Foundation class of edit box series controls, it is the
|
|
abstract parent class of single line edit box and multi-line edit box, which
|
|
defines the common use interface of the two.
|
|
- *Schematic diagram*: _Abstract class, and cannot be used directly_.
|
|
|
|
### Style of `mEdit`
|
|
|
|
It is inherited from the style of [`mScrollView`](MiniGUIProgGuidePart2Chapter15.md)
|
|
|
|
| *Style name* | *miniStudio property name* | *Explanation* |
|
|
|--------------|----------------------------|---------------|
|
|
| `NCSS_EDIT_LEFT` | `Align->Left` | Left aligned |
|
|
| `NCSS_EDIT_CENTER` | `Align->Center` | Horizontal centering |
|
|
| `NCSS_EDIT_RIGHT` | `Align->Right` | Right aligned |
|
|
| `NCSS_EDIT_UPPERCASE` | `Case->Upper` | The input content is automatically converted to capital letter |
|
|
| `NCSS_EDIT_LOWERCASE` | `Case->Lower` | The input content is automatically converted to lower case letter |
|
|
| `NCSS_EDIT_NOHIDESEL` | `HideSel->FALSE` | When the edit box loses focus, the selected content still remains selected status |
|
|
| `NCSS_EDIT_READONLY` | `ReadOnly->TRUE` | The content is read only |
|
|
| `NCSS_EDIT_BASELINE` | `BaseLine->TRUE` | Content underlined display |
|
|
|
|
### Property of `mEdit`
|
|
|
|
It is inherited from the property of [`mScrollView`](MiniGUIProgGuidePart2Chapter15.md).
|
|
|
|
| *Property* | *miniStudio property name* | *Type* | *Authority* | *Explanation* |
|
|
|------------|----------------------------|--------|-------------|----------------|
|
|
| `NCSP_EDIT_LIMITTEXT` | `MaxLength` | int | `RW` | Character number limit value |
|
|
| `NCSP_EDIT_CARETPOS` | -- | int | `RW` | Cursor location |
|
|
|
|
### Event of `mEdit`
|
|
|
|
It is inherited from the event of [`mScrollView`](MiniGUIProgGuidePart2Chapter15.md).
|
|
|
|
| *Event ID* | *Parameter* | *Explanation* |
|
|
|------------|-------------|---------------|
|
|
| `NCSN_EDIT_CHANGE` | -- | Content changes |
|
|
| `NCSN_EDIT_CONTCHANGED` | -- | When edit loses the focus, the content changes |
|
|
| `NCSN_EDIT_UPDATE` | -- | The content is refreshed when changed through `setText` and `resetContent` method or the property is changed |
|
|
| `NCSN_EDIT_SELCHANGED` | -- | The selected part changes |
|
|
| `NCSN_EDIT_MAXTEXT` | -- | Character number is saturated |
|
|
| `NCSN_EDIT_SETFOCUS` | -- | Get the focus |
|
|
| `NCSN_EDIT_KILLFOCUS` | -- | Lose the focus |
|
|
|
|
### Method of `mEdit`
|
|
|
|
It is inherited from the method of[`mScrollView`](MiniGUIProgGuidePart2Chapter15.md).
|
|
|
|
#### `setContent`
|
|
|
|
```cpp
|
|
void setContent(mEdit *self, const char* str, int start, int len)
|
|
```
|
|
|
|
- Parameter
|
|
- str -- literal content displayed in edi
|
|
- start -- display starting location (relative to the starting location of
|
|
str), 0 represents starting from the beginning
|
|
- len -- display character number, -1 represents ending till the end of str
|
|
- Explanation:
|
|
Set the display content of the edit box. The method will get altogether
|
|
characters from No. character location from str character string, and replace
|
|
the existing content in edit.
|
|
- Example:
|
|
|
|
```cpp
|
|
// In edit, character string starting from the sixth character till the end of characterstring “dddd Show Me” will be displayed, and here it is “Show Me”
|
|
_c(edit)->setContent(edit, "dddd Show Me", 6, -1);
|
|
```
|
|
|
|
#### `replaceText`
|
|
|
|
```cpp
|
|
void replaceText(mEdit *self, const char* str,
|
|
int start, int len, int replace_start, int replace_end)
|
|
```
|
|
|
|
- Parameter
|
|
- str -- source character string used for replacement
|
|
- start -- deviation of the source text used for replacement relative to str, 0
|
|
represents starting from the beginning
|
|
- len -- length used to the source text, -1 represents starting from start and
|
|
ending till str
|
|
- `replace_start` -- replace the starting location (relative to the existing
|
|
content in edit)
|
|
- `replace_end` -- replace the ending location (relative to the existing
|
|
content in edit)
|
|
- Explanation:
|
|
Replacement of character string, the method will get altogether characters
|
|
starting from No. character location from str character string, and replaces
|
|
the existing content from to in edit. Str is the character string to be
|
|
replaced to, start is the starting location relative to str, 0 represents
|
|
starting from the beginning, len is the length, -1 represents ending till the
|
|
end of str, `replace_start` and `replace_end` are the starting point and ending
|
|
point of the location to be replaced, and they are location deviation relative
|
|
to the existing text content in edit.
|
|
- Example:
|
|
|
|
```cpp
|
|
// In edit, character string starting from the sixth character to the end of the character string “dddd Show Me” will be used (here it is “Show Me”),
|
|
// To replace the characters from the second one to the tenth one of the existing text in edit
|
|
_c(edit)->replaceText(edit, "dddd Show Me", 6, -1, 2, 10);
|
|
```
|
|
|
|
#### insert
|
|
|
|
```cpp
|
|
void insert(mEdit *self, const char* str, int start, int len, int at)
|
|
```
|
|
- Parameter
|
|
- str -- source character string to be inserted
|
|
- start -- starting location of the source text used, 0 represents starting
|
|
from the beginning
|
|
- len -- length of the source text used, -1 represents starting from start, and
|
|
ending till str
|
|
- at -- location of the insert point (relative to the existing content in
|
|
edit), -1 represents the end
|
|
- Explanation:
|
|
Insert of the character string, the method will get altogether characters
|
|
starting from No. character location in str character string, and it is
|
|
inserting into location of No. character of the existing content in edit. Str
|
|
is the character string to be inserted, start is the starting location relative
|
|
to str, 0 represents starting from the beginning, len is the length, -1
|
|
represents ending till the end of str, at parameter is the location to insert,
|
|
and it is the location deviation relative to the existing text content in edit
|
|
- Example:
|
|
|
|
```cpp
|
|
//In edit, character string starting from the sixth character till the end of the character string “dddd Show Me” will be used (here it is “Show Me”),
|
|
// To insert to after the second character of the existing text in edit
|
|
_c(edit)->insert(edit, "dddd Show Me", 6, -1, 2);
|
|
```
|
|
|
|
#### append
|
|
|
|
```cpp
|
|
void append(mEdit *self, const char* str, int start, int len)
|
|
```
|
|
- Parameter
|
|
- str -- source character string to append
|
|
- start -- starting location of the source text used, 0 represents starting
|
|
from the beginning
|
|
- len -- length of the source text used, -1 represents starting from start and
|
|
ending till str
|
|
- Explanation:
|
|
Append the character string, the method will get altogether characters starting
|
|
from No. character location from str character string, and append to after the
|
|
existing content in edit. str is the character string to append, start is the
|
|
starting location relative to str, 0 represents starting from the beginning,
|
|
len is the length, and -1 represents ending till the end of str.
|
|
- Example:
|
|
```cpp
|
|
// In edit, character string starting from the sixth character till the end of the character string “dddd Show Me” will be used (here it is “Show Me”),
|
|
// To append till the end of the existing text in edit
|
|
_c(edit)->append(edit, "dddd Show Me", 6, -1);
|
|
```
|
|
|
|
#### `getTextLength`
|
|
|
|
```cpp
|
|
int getTextLength(mEdit *self)
|
|
```
|
|
- Explanation: Get length of the content of the character string in Edit
|
|
- Example:
|
|
|
|
```cpp
|
|
int text_len = _c(edit)->getTextLength(edit);
|
|
```
|
|
|
|
#### `getContent`
|
|
|
|
```cpp
|
|
int getContent(mEdit *self, char *strbuff, int buf_len, int start, int end)
|
|
```
|
|
- Parameter:
|
|
- strbuff -- get storage location to the character string (storage space shall
|
|
be distributed in advance)
|
|
- `buff_len` -- size of strbuff
|
|
- start -- starting location of the obtained content
|
|
- end -- ending location of the obtained content
|
|
- Explanation:
|
|
Get character string content in edit, and get the content from to location from
|
|
the existing content and write into strbuff, and the maximum number to write in
|
|
is limited to `buff_len.`
|
|
- Example:
|
|
|
|
```cpp
|
|
char buff[128];
|
|
_c(edit)->getContent(edit, buff, 127, 0, -1); // Get out all the content in edit, and buff stores 127 characters to the maximum
|
|
```
|
|
|
|
#### `setSel` and `getSel`
|
|
|
|
```cpp
|
|
int setSel(mEdit *self, int start, int end)
|
|
int getSel(mEdit *self, int *pstart, int *pend)
|
|
```
|
|
|
|
- Parameter:
|
|
- start \end -- starting point and ending point of the selected region
|
|
- pstart\pend -- starting point and ending point of the selected region, used
|
|
for function return
|
|
- Explanation:
|
|
Set and get the region of the selected text, and the last two parameters
|
|
correspond to the starting point and ending point of the selected region
|
|
respectively
|
|
- Example:
|
|
|
|
```cpp
|
|
_c(edit)->setSel(edit, 2, 10); // Set No.2 to No.10 characters of edit as selected status
|
|
|
|
int ps,pe;
|
|
_c(edit)->getSel(edit, &ps, &pe); // Get the selected region
|
|
```
|
|
|
|
#### `setMargin`
|
|
|
|
```cpp
|
|
void setMargin(mEdit *self, int left, int top, int right, int bottom)
|
|
```
|
|
- Parameter:
|
|
- left,top,right,bottom -- margin of left, top, right and bottom, the parameter
|
|
is not a concept of rectangle, and it just continues to use the data structure
|
|
of rectangle for the convenience of parameter transmission
|
|
- Explanation: Set left, top, right and bottom margin of the edit region
|
|
- Example:
|
|
|
|
```cpp
|
|
// Set margin
|
|
_c(edit)- >setMargin(edit, 10,10,10,10);
|
|
```
|
|
|
|
#### copy, paste, and cut
|
|
|
|
```cpp
|
|
void copy(mEdit *self)
|
|
void cut(mEdit *self)
|
|
void paste(mEdit *self)
|
|
TextCopyPaste * setCopyPaste(mEdit *self, TextCopyPaste* cp)
|
|
```
|
|
|
|
Cut, copy and paste aim at the operation of the selected region. In edit, a
|
|
group of operation set using minigui cut board is realized by default, and the
|
|
users can set operation set realized by itself through `setCopyPaste`.
|
|
|
|
#### makevisible
|
|
|
|
```cpp
|
|
BOOL makevisible(mEdit *self, int pos)
|
|
```
|
|
- Parameter:
|
|
- pos -- location needs to be visible
|
|
- Explanation:
|
|
Control scrolling of the edit region, making the characters of the location
|
|
`pos` become visible.
|
|
- Example:
|
|
|
|
```cpp
|
|
// Visible at No. 201 character
|
|
_c(edit)- >makevisible(edit, 201);
|
|
```
|
|
|
|
## `mSlEdit`
|
|
|
|
- *Control window class*: `NCSCTRL_SLEDIT`
|
|
- *Control English name*: Single Line Edit Or SlEdit
|
|
- *Brief introduction*: Single line text edit box
|
|
- *Schematic diagram*:
|
|
|
|

|
|
|
|
|
|
### Style of `mSIEdit`
|
|
|
|
It is inherited from the style of [`mEdit`](MiniGUIProgGuidePart2Chapter13.md#medit).
|
|
|
|
| *Style name* | *miniStudio property name* | *Explanation* |
|
|
|--------------|----------------------------|---------------|
|
|
| `NCSS_SLEDIT_PASSWORD` | `Password->TRUE` | Content of the edit box is shield displayed in the mode of password input |
|
|
| `NCSS_SLEDIT_AUTOSELECT` | `AutoSelect->TRUE` | Automatic selected style, after the focus is obtained, the text automatically becomes selected status |
|
|
|
|
|
|
### Property of `mSIEdit`
|
|
|
|
It is inherited from the property of [`mEdit`](MiniGUIProgGuidePart2Chapter13.md#medit).
|
|
|
|
| *Property* | *miniStudio property name* | *Type* | *Authority* | *Explanation* |
|
|
|------------|----------------------------|--------|-------------|---------------|
|
|
| `NCSP_SLEDIT_TIPTEXT` | `ToolTip` | char * | `RW` | Prompt information character string, when there is no input, information used to prompt users |
|
|
| `NCSP_SLEDIT_PWDCHAR` | `PasswordChar` | char | `RW` | Character displayed by pass word, only `NCSS_SLEDIT_PASSWORD` style is valid, `*` by default |
|
|
|
|
|
|
### Event of `mSIEdit`
|
|
|
|
It is inherited from the event of [`mEdit`](MiniGUIProgGuidePart2Chapter13.md#medit).
|
|
|
|
| *Event ID* | *Parameter* | *explanation* |
|
|
|------------|-------------|---------------|
|
|
| `NCSN_SLEDIT_ENTER` | -- | Capture enter key information |
|
|
|
|
|
|
### Method of `mSIEdit`
|
|
|
|
It is inherited from the method of [`mEdit`](MiniGUIProgGuidePart2Chapter13.md#medit).
|
|
_There is no newly introduced method_.
|
|
|
|
### Programming Example of `mSIEdit`
|
|
|
|
- `SlEdit` Example code:
|
|
|
|
```cpp
|
|
/*
|
|
** edit.c: Sample program for mGNCS Programming Guide
|
|
** Using edit.
|
|
**
|
|
** Copyright (C) 2009 ~ 2019 FMSoft Technologies.
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
#include <minigui/common.h>
|
|
#include <minigui/minigui.h>
|
|
#include <minigui/gdi.h>
|
|
#include <minigui/window.h>
|
|
#include <minigui/control.h>
|
|
|
|
#include <mgncs/mgncs.h>
|
|
|
|
#define ID_NAME 104
|
|
#define ID_COUN 105
|
|
#define ID_CITY 106
|
|
#define ID_PSWD 107
|
|
#define ID_SPIN 108
|
|
#define ID_INFO 109
|
|
|
|
#define ID_REG 155
|
|
#define ID_CAN 156
|
|
|
|
|
|
static BOOL mymain_onCreate (mWidget* _this, DWORD add_data)
|
|
{
|
|
return TRUE;
|
|
}
|
|
|
|
static void mymain_onClose (mWidget* _this, int message)
|
|
{
|
|
DestroyMainWindow (_this->hwnd);
|
|
PostQuitMessage (_this->hwnd);
|
|
}
|
|
|
|
static NCS_EVENT_HANDLER mymain_handlers[] = {
|
|
{MSG_CREATE, mymain_onCreate},
|
|
{MSG_CLOSE, mymain_onClose},
|
|
{0, NULL}
|
|
};
|
|
|
|
static void btn_onClicked(mWidget* _this, int id, int nc, HWND hCtrl)
|
|
{
|
|
if(nc == NCSN_WIDGET_CLICKED)
|
|
{
|
|
if (id == ID_CAN){
|
|
PostMessage(GetParent(_this->hwnd), MSG_CLOSE, 0, 0);
|
|
} else if (id == ID_REG){
|
|
//TODO
|
|
}
|
|
|
|
}
|
|
};
|
|
|
|
static NCS_EVENT_HANDLER btn_handlers[] =
|
|
{
|
|
{NCS_NOTIFY_CODE(NCSN_WIDGET_CLICKED), btn_onClicked},
|
|
{0, NULL}
|
|
};
|
|
|
|
static NCS_RDR_INFO btn_rdr_info[] =
|
|
{
|
|
{"fashion","fashion", NULL}
|
|
};
|
|
|
|
static NCS_PROP_ENTRY static_props[] =
|
|
{
|
|
{NCSP_STATIC_ALIGN, NCS_ALIGN_RIGHT},
|
|
{0, 0}
|
|
};
|
|
|
|
static NCS_PROP_ENTRY spin_props [] =
|
|
{
|
|
{NCSP_SPNBOX_MAXPOS, 99},
|
|
{NCSP_SPNBOX_MINPOS, 0},
|
|
{NCSP_SPNBOX_CURPOS, 25},
|
|
{NCSP_SPNBOX_LINESTEP, 1},
|
|
{0, 0}
|
|
};
|
|
|
|
#define HSTART 25
|
|
#define HSPACE 40
|
|
|
|
static NCS_WND_TEMPLATE _ctrl_templ[] =
|
|
{
|
|
//START_OF_SLEDIT_TEMPLATE
|
|
{
|
|
NCSCTRL_STATIC,
|
|
0,
|
|
10, HSTART, 70, 25,
|
|
WS_VISIBLE,
|
|
WS_EX_NONE,
|
|
"Name :",
|
|
static_props,
|
|
NULL,
|
|
NULL, NULL, 0, 0
|
|
},
|
|
{ //左对齐
|
|
NCSCTRL_SLEDIT,
|
|
ID_NAME,
|
|
100, HSTART, 150, 25,
|
|
WS_BORDER | WS_VISIBLE | NCSS_EDIT_LEFT,
|
|
WS_EX_NONE,
|
|
"",
|
|
NULL,
|
|
NULL,
|
|
NULL, NULL, 0, 0
|
|
},
|
|
{
|
|
NCSCTRL_STATIC,
|
|
0,
|
|
10, HSTART + HSPACE, 70, 25,
|
|
WS_VISIBLE,
|
|
WS_EX_NONE,
|
|
"Age :",
|
|
static_props,
|
|
NULL,
|
|
NULL, NULL, 0, 0
|
|
},
|
|
{
|
|
NCSCTRL_SPINBOX,
|
|
ID_SPIN,
|
|
100, HSTART + HSPACE, 70, 25,
|
|
WS_VISIBLE | NCSS_SPNBOX_NUMBER | NCSS_SPNBOX_AUTOLOOP,
|
|
WS_EX_NONE,
|
|
"",
|
|
spin_props,
|
|
NULL,
|
|
NULL, NULL, 0, 0
|
|
},
|
|
{
|
|
NCSCTRL_STATIC,
|
|
0,
|
|
10, HSTART + 2 * HSPACE, 70, 25,
|
|
WS_VISIBLE,
|
|
WS_EX_NONE,
|
|
"Country:",
|
|
static_props,
|
|
NULL,
|
|
NULL, NULL, 0, 0
|
|
},
|
|
{ //居中对齐, 大写字母
|
|
NCSCTRL_SLEDIT,
|
|
ID_COUN,
|
|
100, HSTART + 2 * HSPACE, 130, 25,
|
|
WS_BORDER | WS_VISIBLE | NCSS_EDIT_CENTER | NCSS_EDIT_UPPERCASE,
|
|
WS_EX_NONE,
|
|
"",
|
|
NULL,
|
|
NULL,
|
|
NULL, NULL, 0, 0
|
|
},
|
|
{
|
|
NCSCTRL_STATIC,
|
|
0,
|
|
10, HSTART + 3 * HSPACE, 70, 25,
|
|
WS_VISIBLE,
|
|
WS_EX_NONE,
|
|
"City :",
|
|
static_props,
|
|
NULL,
|
|
NULL, NULL, 0, 0
|
|
},
|
|
{ //小写字母
|
|
NCSCTRL_SLEDIT,
|
|
ID_CITY,
|
|
100, HSTART + 3 * HSPACE, 150, 25,
|
|
WS_BORDER | WS_VISIBLE | NCSS_EDIT_LOWERCASE,
|
|
WS_EX_NONE,
|
|
"",
|
|
NULL,
|
|
NULL,
|
|
NULL, NULL, 0, 0
|
|
},
|
|
{
|
|
NCSCTRL_STATIC,
|
|
0,
|
|
10, HSTART + 4 * HSPACE, 70, 25,
|
|
WS_VISIBLE,
|
|
WS_EX_NONE,
|
|
"Passwd :",
|
|
static_props,
|
|
NULL,
|
|
NULL, NULL, 0, 0
|
|
},
|
|
{ //密码输入形式的edit
|
|
NCSCTRL_SLEDIT,
|
|
ID_PSWD,
|
|
100, HSTART + 4 * HSPACE, 150, 25,
|
|
WS_BORDER | WS_VISIBLE | NCSS_SLEDIT_PASSWORD,
|
|
WS_EX_NONE,
|
|
"",
|
|
NULL,
|
|
NULL,
|
|
NULL, NULL, 0, 0
|
|
},
|
|
//END_OF_SLEDIT_TEMPLATE
|
|
//START_OF_MLEDIT_TEMPLATE
|
|
{
|
|
NCSCTRL_STATIC,
|
|
0,
|
|
10, HSTART + 5 * HSPACE, 70, 25,
|
|
WS_VISIBLE,
|
|
WS_EX_NONE,
|
|
"Info :",
|
|
static_props,
|
|
NULL,
|
|
NULL, NULL, 0, 0
|
|
},
|
|
{ //多行编辑框
|
|
NCSCTRL_MLEDIT,
|
|
ID_INFO,
|
|
100, HSTART + 5 * HSPACE, 200, 160,
|
|
WS_BORDER | WS_VISIBLE | WS_VSCROLL | NCSS_EDIT_BASELINE,
|
|
WS_EX_NONE,
|
|
"",
|
|
NULL,
|
|
NULL,
|
|
NULL, NULL, 0, 0
|
|
},
|
|
//END_OF_MLEDIT_TEMPLATE
|
|
|
|
{
|
|
NCSCTRL_BUTTON,
|
|
ID_REG,
|
|
240, 400, 80, 25,
|
|
WS_VISIBLE | NCSS_NOTIFY,
|
|
WS_EX_NONE,
|
|
"Register",
|
|
NULL,
|
|
btn_rdr_info,
|
|
btn_handlers, NULL, 0, 0
|
|
},
|
|
{
|
|
NCSCTRL_BUTTON,
|
|
ID_CAN,
|
|
120, 400, 80, 25,
|
|
WS_VISIBLE | NCSS_NOTIFY,
|
|
WS_EX_NONE,
|
|
"Cancel",
|
|
NULL,
|
|
btn_rdr_info,
|
|
btn_handlers, NULL, 0, 0
|
|
},
|
|
};
|
|
|
|
static NCS_MNWND_TEMPLATE mymain_templ =
|
|
{
|
|
NCSCTRL_DIALOGBOX,
|
|
1,
|
|
0, 0, 360, 480,
|
|
WS_CAPTION | WS_BORDER | WS_VISIBLE,
|
|
WS_EX_NONE,
|
|
"Register",
|
|
NULL,
|
|
NULL,
|
|
mymain_handlers,
|
|
_ctrl_templ,
|
|
sizeof(_ctrl_templ)/sizeof(NCS_WND_TEMPLATE),
|
|
0,
|
|
0, 0,
|
|
};
|
|
|
|
int MiniGUIMain (int argc, const char* argv[])
|
|
{
|
|
ncsInitialize ();
|
|
|
|
mDialogBox* mydlg = (mDialogBox *)ncsCreateMainWindowIndirect
|
|
(&mymain_templ, HWND_DESKTOP);
|
|
|
|
_c(mydlg)->doModal (mydlg, TRUE);
|
|
|
|
ncsUninitialize ();
|
|
|
|
return 0;
|
|
}
|
|
|
|
```
|
|
|
|
- We define use template of `SIEdit` in this way
|
|
|
|
```cpp
|
|
{
|
|
NCSCTRL_STATIC,
|
|
0,
|
|
10, HSTART, 70, 25,
|
|
WS_VISIBLE,
|
|
WS_EX_NONE,
|
|
"Name :",
|
|
static_props,
|
|
NULL,
|
|
NULL, NULL, 0, 0
|
|
},
|
|
{ //左对齐
|
|
NCSCTRL_SLEDIT,
|
|
ID_NAME,
|
|
100, HSTART, 150, 25,
|
|
WS_BORDER | WS_VISIBLE | NCSS_EDIT_LEFT,
|
|
WS_EX_NONE,
|
|
"",
|
|
NULL,
|
|
NULL,
|
|
NULL, NULL, 0, 0
|
|
},
|
|
{
|
|
NCSCTRL_STATIC,
|
|
0,
|
|
10, HSTART + HSPACE, 70, 25,
|
|
WS_VISIBLE,
|
|
WS_EX_NONE,
|
|
"Age :",
|
|
static_props,
|
|
NULL,
|
|
NULL, NULL, 0, 0
|
|
},
|
|
{
|
|
NCSCTRL_SPINBOX,
|
|
ID_SPIN,
|
|
100, HSTART + HSPACE, 70, 25,
|
|
WS_VISIBLE | NCSS_SPNBOX_NUMBER | NCSS_SPNBOX_AUTOLOOP,
|
|
WS_EX_NONE,
|
|
"",
|
|
spin_props,
|
|
NULL,
|
|
NULL, NULL, 0, 0
|
|
},
|
|
{
|
|
NCSCTRL_STATIC,
|
|
0,
|
|
10, HSTART + 2 * HSPACE, 70, 25,
|
|
WS_VISIBLE,
|
|
WS_EX_NONE,
|
|
"Country:",
|
|
static_props,
|
|
NULL,
|
|
NULL, NULL, 0, 0
|
|
},
|
|
{ //居中对齐, 大写字母
|
|
NCSCTRL_SLEDIT,
|
|
ID_COUN,
|
|
100, HSTART + 2 * HSPACE, 130, 25,
|
|
WS_BORDER | WS_VISIBLE | NCSS_EDIT_CENTER | NCSS_EDIT_UPPERCASE,
|
|
WS_EX_NONE,
|
|
"",
|
|
NULL,
|
|
NULL,
|
|
NULL, NULL, 0, 0
|
|
},
|
|
{
|
|
NCSCTRL_STATIC,
|
|
0,
|
|
10, HSTART + 3 * HSPACE, 70, 25,
|
|
WS_VISIBLE,
|
|
WS_EX_NONE,
|
|
"City :",
|
|
static_props,
|
|
NULL,
|
|
NULL, NULL, 0, 0
|
|
},
|
|
{ //小写字母
|
|
NCSCTRL_SLEDIT,
|
|
ID_CITY,
|
|
100, HSTART + 3 * HSPACE, 150, 25,
|
|
WS_BORDER | WS_VISIBLE | NCSS_EDIT_LOWERCASE,
|
|
WS_EX_NONE,
|
|
"",
|
|
NULL,
|
|
NULL,
|
|
NULL, NULL, 0, 0
|
|
},
|
|
{
|
|
NCSCTRL_STATIC,
|
|
0,
|
|
10, HSTART + 4 * HSPACE, 70, 25,
|
|
WS_VISIBLE,
|
|
WS_EX_NONE,
|
|
"Passwd :",
|
|
static_props,
|
|
NULL,
|
|
NULL, NULL, 0, 0
|
|
},
|
|
{ //密码输入形式的edit
|
|
NCSCTRL_SLEDIT,
|
|
ID_PSWD,
|
|
100, HSTART + 4 * HSPACE, 150, 25,
|
|
WS_BORDER | WS_VISIBLE | NCSS_SLEDIT_PASSWORD,
|
|
WS_EX_NONE,
|
|
"",
|
|
NULL,
|
|
NULL,
|
|
NULL, NULL, 0, 0
|
|
},
|
|
```
|
|
|
|
- *Control window class*: `NCSCTRL_MLEDIT`
|
|
- *Control English name*: Multiline Edit or `MlEdit`
|
|
- *Brief introduction*: Multiline text edit box
|
|
- *Schematic diagram*:
|
|
|
|

|
|
|
|
### Style of `mMIEdit`
|
|
|
|
It is inherited from the style of [`mEdit`](MiniGUIProgGuidePart2Chapter13.md#medit).
|
|
|
|
| *Style name* | *miniStudio property name* | *Explanation* |
|
|
|--------------|----------------------------|----------------|
|
|
| `NCSS_MLEDIT_AUTOWRAP` | `AutoWrap->TRUE` | Automatic wrap |
|
|
|
|
### Property of `mMIEdit`
|
|
|
|
It is inherited from the property of [`mEdit`](MiniGUIProgGuidePart2Chapter13.md#medit).
|
|
|
|
| *Property* | *miniStudio property name* | *Type* | *Authority* | *Explanation* |
|
|
|------------|----------------------------|--------|-------------|---------------|
|
|
| `NCSP_MLEDIT_LINECOUNT`| -- | int | `RO` | Row number |
|
|
| `NCSP_MLEDIT_LINEHEIGHT`| `LineHeight` | int | `RW` | Row height |
|
|
| `NCSP_MLEDIT_LINEFEEDISPCHAR` | -- | char | `WO` | Line break is displayed by this character |
|
|
| `NCSP_MLEDIT_LINESEP` | `LineSeperator` | char | `RW` | Line break symbol, “\n” by default |
|
|
| `NCSP_MLEDIT_CARETSHAPE` | `CaretShap` | int | `RW` | Cursor shape `ED_CARETSHAPE_LINE` or `ED_CARETSHAPE_BLOCK` |
|
|
| `NCSP_MLEDIT_NUMOFPARAGRAPHS` | -- | int | `RO` | Number of paragraphs |
|
|
|
|
|
|
### Event of `mMIEdit`
|
|
|
|
It is inherited from the event of [`mEdit`](MiniGUIProgGuidePart2Chapter13.md#medit).
|
|
_There is no newly introduced event_.
|
|
|
|
### Method of `mMIEdit`
|
|
|
|
It is inherited from the method of [`mEdit`](MiniGUIProgGuidePart2Chapter13.md#medit).
|
|
|
|
### Programming Example of `mMIEdit`
|
|
|
|
- `MlEdit` Example code:
|
|
|
|
```cpp
|
|
/*
|
|
** edit.c: Sample program for mGNCS Programming Guide
|
|
** Using edit.
|
|
**
|
|
** Copyright (C) 2009 ~ 2019 FMSoft Technologies.
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
#include <minigui/common.h>
|
|
#include <minigui/minigui.h>
|
|
#include <minigui/gdi.h>
|
|
#include <minigui/window.h>
|
|
#include <minigui/control.h>
|
|
|
|
#include <mgncs/mgncs.h>
|
|
|
|
#define ID_NAME 104
|
|
#define ID_COUN 105
|
|
#define ID_CITY 106
|
|
#define ID_PSWD 107
|
|
#define ID_SPIN 108
|
|
#define ID_INFO 109
|
|
|
|
#define ID_REG 155
|
|
#define ID_CAN 156
|
|
|
|
|
|
static BOOL mymain_onCreate (mWidget* _this, DWORD add_data)
|
|
{
|
|
return TRUE;
|
|
}
|
|
|
|
static void mymain_onClose (mWidget* _this, int message)
|
|
{
|
|
DestroyMainWindow (_this->hwnd);
|
|
PostQuitMessage (_this->hwnd);
|
|
}
|
|
|
|
static NCS_EVENT_HANDLER mymain_handlers[] = {
|
|
{MSG_CREATE, mymain_onCreate},
|
|
{MSG_CLOSE, mymain_onClose},
|
|
{0, NULL}
|
|
};
|
|
|
|
static void btn_onClicked(mWidget* _this, int id, int nc, HWND hCtrl)
|
|
{
|
|
if(nc == NCSN_WIDGET_CLICKED)
|
|
{
|
|
if (id == ID_CAN){
|
|
PostMessage(GetParent(_this->hwnd), MSG_CLOSE, 0, 0);
|
|
} else if (id == ID_REG){
|
|
//TODO
|
|
}
|
|
|
|
}
|
|
};
|
|
|
|
static NCS_EVENT_HANDLER btn_handlers[] =
|
|
{
|
|
{NCS_NOTIFY_CODE(NCSN_WIDGET_CLICKED), btn_onClicked},
|
|
{0, NULL}
|
|
};
|
|
|
|
static NCS_RDR_INFO btn_rdr_info[] =
|
|
{
|
|
{"fashion","fashion", NULL}
|
|
};
|
|
|
|
static NCS_PROP_ENTRY static_props[] =
|
|
{
|
|
{NCSP_STATIC_ALIGN, NCS_ALIGN_RIGHT},
|
|
{0, 0}
|
|
};
|
|
|
|
static NCS_PROP_ENTRY spin_props [] =
|
|
{
|
|
{NCSP_SPNBOX_MAXPOS, 99},
|
|
{NCSP_SPNBOX_MINPOS, 0},
|
|
{NCSP_SPNBOX_CURPOS, 25},
|
|
{NCSP_SPNBOX_LINESTEP, 1},
|
|
{0, 0}
|
|
};
|
|
|
|
#define HSTART 25
|
|
#define HSPACE 40
|
|
|
|
static NCS_WND_TEMPLATE _ctrl_templ[] =
|
|
{
|
|
//START_OF_SLEDIT_TEMPLATE
|
|
{
|
|
NCSCTRL_STATIC,
|
|
0,
|
|
10, HSTART, 70, 25,
|
|
WS_VISIBLE,
|
|
WS_EX_NONE,
|
|
"Name :",
|
|
static_props,
|
|
NULL,
|
|
NULL, NULL, 0, 0
|
|
},
|
|
{ //左对齐
|
|
NCSCTRL_SLEDIT,
|
|
ID_NAME,
|
|
100, HSTART, 150, 25,
|
|
WS_BORDER | WS_VISIBLE | NCSS_EDIT_LEFT,
|
|
WS_EX_NONE,
|
|
"",
|
|
NULL,
|
|
NULL,
|
|
NULL, NULL, 0, 0
|
|
},
|
|
{
|
|
NCSCTRL_STATIC,
|
|
0,
|
|
10, HSTART + HSPACE, 70, 25,
|
|
WS_VISIBLE,
|
|
WS_EX_NONE,
|
|
"Age :",
|
|
static_props,
|
|
NULL,
|
|
NULL, NULL, 0, 0
|
|
},
|
|
{
|
|
NCSCTRL_SPINBOX,
|
|
ID_SPIN,
|
|
100, HSTART + HSPACE, 70, 25,
|
|
WS_VISIBLE | NCSS_SPNBOX_NUMBER | NCSS_SPNBOX_AUTOLOOP,
|
|
WS_EX_NONE,
|
|
"",
|
|
spin_props,
|
|
NULL,
|
|
NULL, NULL, 0, 0
|
|
},
|
|
{
|
|
NCSCTRL_STATIC,
|
|
0,
|
|
10, HSTART + 2 * HSPACE, 70, 25,
|
|
WS_VISIBLE,
|
|
WS_EX_NONE,
|
|
"Country:",
|
|
static_props,
|
|
NULL,
|
|
NULL, NULL, 0, 0
|
|
},
|
|
{ //居中对齐, 大写字母
|
|
NCSCTRL_SLEDIT,
|
|
ID_COUN,
|
|
100, HSTART + 2 * HSPACE, 130, 25,
|
|
WS_BORDER | WS_VISIBLE | NCSS_EDIT_CENTER | NCSS_EDIT_UPPERCASE,
|
|
WS_EX_NONE,
|
|
"",
|
|
NULL,
|
|
NULL,
|
|
NULL, NULL, 0, 0
|
|
},
|
|
{
|
|
NCSCTRL_STATIC,
|
|
0,
|
|
10, HSTART + 3 * HSPACE, 70, 25,
|
|
WS_VISIBLE,
|
|
WS_EX_NONE,
|
|
"City :",
|
|
static_props,
|
|
NULL,
|
|
NULL, NULL, 0, 0
|
|
},
|
|
{ //小写字母
|
|
NCSCTRL_SLEDIT,
|
|
ID_CITY,
|
|
100, HSTART + 3 * HSPACE, 150, 25,
|
|
WS_BORDER | WS_VISIBLE | NCSS_EDIT_LOWERCASE,
|
|
WS_EX_NONE,
|
|
"",
|
|
NULL,
|
|
NULL,
|
|
NULL, NULL, 0, 0
|
|
},
|
|
{
|
|
NCSCTRL_STATIC,
|
|
0,
|
|
10, HSTART + 4 * HSPACE, 70, 25,
|
|
WS_VISIBLE,
|
|
WS_EX_NONE,
|
|
"Passwd :",
|
|
static_props,
|
|
NULL,
|
|
NULL, NULL, 0, 0
|
|
},
|
|
{ //密码输入形式的edit
|
|
NCSCTRL_SLEDIT,
|
|
ID_PSWD,
|
|
100, HSTART + 4 * HSPACE, 150, 25,
|
|
WS_BORDER | WS_VISIBLE | NCSS_SLEDIT_PASSWORD,
|
|
WS_EX_NONE,
|
|
"",
|
|
NULL,
|
|
NULL,
|
|
NULL, NULL, 0, 0
|
|
},
|
|
//END_OF_SLEDIT_TEMPLATE
|
|
//START_OF_MLEDIT_TEMPLATE
|
|
{
|
|
NCSCTRL_STATIC,
|
|
0,
|
|
10, HSTART + 5 * HSPACE, 70, 25,
|
|
WS_VISIBLE,
|
|
WS_EX_NONE,
|
|
"Info :",
|
|
static_props,
|
|
NULL,
|
|
NULL, NULL, 0, 0
|
|
},
|
|
{ //多行编辑框
|
|
NCSCTRL_MLEDIT,
|
|
ID_INFO,
|
|
100, HSTART + 5 * HSPACE, 200, 160,
|
|
WS_BORDER | WS_VISIBLE | WS_VSCROLL | NCSS_EDIT_BASELINE,
|
|
WS_EX_NONE,
|
|
"",
|
|
NULL,
|
|
NULL,
|
|
NULL, NULL, 0, 0
|
|
},
|
|
//END_OF_MLEDIT_TEMPLATE
|
|
|
|
{
|
|
NCSCTRL_BUTTON,
|
|
ID_REG,
|
|
240, 400, 80, 25,
|
|
WS_VISIBLE | NCSS_NOTIFY,
|
|
WS_EX_NONE,
|
|
"Register",
|
|
NULL,
|
|
btn_rdr_info,
|
|
btn_handlers, NULL, 0, 0
|
|
},
|
|
{
|
|
NCSCTRL_BUTTON,
|
|
ID_CAN,
|
|
120, 400, 80, 25,
|
|
WS_VISIBLE | NCSS_NOTIFY,
|
|
WS_EX_NONE,
|
|
"Cancel",
|
|
NULL,
|
|
btn_rdr_info,
|
|
btn_handlers, NULL, 0, 0
|
|
},
|
|
};
|
|
|
|
static NCS_MNWND_TEMPLATE mymain_templ =
|
|
{
|
|
NCSCTRL_DIALOGBOX,
|
|
1,
|
|
0, 0, 360, 480,
|
|
WS_CAPTION | WS_BORDER | WS_VISIBLE,
|
|
WS_EX_NONE,
|
|
"Register",
|
|
NULL,
|
|
NULL,
|
|
mymain_handlers,
|
|
_ctrl_templ,
|
|
sizeof(_ctrl_templ)/sizeof(NCS_WND_TEMPLATE),
|
|
0,
|
|
0, 0,
|
|
};
|
|
|
|
int MiniGUIMain (int argc, const char* argv[])
|
|
{
|
|
ncsInitialize ();
|
|
|
|
mDialogBox* mydlg = (mDialogBox *)ncsCreateMainWindowIndirect
|
|
(&mymain_templ, HWND_DESKTOP);
|
|
|
|
_c(mydlg)->doModal (mydlg, TRUE);
|
|
|
|
ncsUninitialize ();
|
|
|
|
return 0;
|
|
}
|
|
|
|
```
|
|
|
|
- We define the use template of `MIEdit` in this way
|
|
|
|
```cpp
|
|
{
|
|
NCSCTRL_STATIC,
|
|
0,
|
|
10, HSTART + 5 * HSPACE, 70, 25,
|
|
WS_VISIBLE,
|
|
WS_EX_NONE,
|
|
"Info :",
|
|
static_props,
|
|
NULL,
|
|
NULL, NULL, 0, 0
|
|
},
|
|
{ //多行编辑框
|
|
NCSCTRL_MLEDIT,
|
|
ID_INFO,
|
|
100, HSTART + 5 * HSPACE, 200, 160,
|
|
WS_BORDER | WS_VISIBLE | WS_VSCROLL | NCSS_EDIT_BASELINE,
|
|
WS_EX_NONE,
|
|
"",
|
|
NULL,
|
|
NULL,
|
|
NULL, NULL, 0, 0
|
|
},
|
|
```
|
|
----
|
|
|
|
[<< Property Sheet Control Class](MiniGUIProgGuidePart2Chapter12.md) |
|
|
[Table of Contents](README.md) |
|
|
[Animation Control Class >>](MiniGUIProgGuidePart2Chapter14.md)
|
|
|
|
[Release Notes for MiniGUI 3.2]: /supplementary-docs/Release-Notes-for-MiniGUI-3.2.md
|
|
[Release Notes for MiniGUI 4.0]: /supplementary-docs/Release-Notes-for-MiniGUI-4.0.md
|
|
[Showing Text in Complex or Mixed Scripts]: /supplementary-docs/Showing-Text-in-Complex-or-Mixed-Scripts.md
|
|
[Supporting and Using Extra Input Messages]: /supplementary-docs/Supporting-and-Using-Extra-Input-Messages.md
|
|
[Using CommLCD NEWGAL Engine and Comm IAL Engine]: /supplementary-docs/Using-CommLCD-NEWGAL-Engine-and-Comm-IAL-Engine.md
|
|
[Using Enhanced Font Interfaces]: /supplementary-docs/Using-Enhanced-Font-Interfaces.md
|
|
[Using Images and Fonts on System without File System]: /supplementary-docs/Using-Images-and-Fonts-on-System-without-File-System.md
|
|
[Using SyncUpdateDC to Reduce Screen Flicker]: /supplementary-docs/Using-SyncUpdateDC-to-Reduce-Screen-Flicker.md
|
|
[Writing DRM Engine Driver for Your GPU]: /supplementary-docs/Writing-DRM-Engine-Driver-for-Your-GPU.md
|
|
[Writing MiniGUI Apps for 64-bit Platforms]: /supplementary-docs/Writing-MiniGUI-Apps-for-64-bit-Platforms.md
|
|
|
|
[Quick Start]: /user-manual/MiniGUIUserManualQuickStart.md
|
|
[Building MiniGUI]: /user-manual/MiniGUIUserManualBuildingMiniGUI.md
|
|
[Compile-time Configuration]: /user-manual/MiniGUIUserManualCompiletimeConfiguration.md
|
|
[Runtime Configuration]: /user-manual/MiniGUIUserManualRuntimeConfiguration.md
|
|
[Tools]: /user-manual/MiniGUIUserManualTools.md
|
|
[Feature List]: /user-manual/MiniGUIUserManualFeatureList.md
|
|
|
|
[MiniGUI Overview]: /MiniGUI-Overview.md
|
|
[MiniGUI User Manual]: /user-manual/README.md
|
|
[MiniGUI Programming Guide]: /programming-guide/README.md
|
|
[MiniGUI Porting Guide]: /porting-guide/README.md
|
|
[MiniGUI Supplementary Documents]: /supplementary-docs/README.md
|
|
[MiniGUI API Reference Manuals]: /api-reference/README.md
|
|
|
|
[MiniGUI Official Website]: http://www.minigui.com
|
|
[Beijing FMSoft Technologies Co., Ltd.]: https://www.fmsoft.cn
|
|
[FMSoft Technologies]: https://www.fmsoft.cn
|
|
[HarfBuzz]: https://www.freedesktop.org/wiki/Software/HarfBuzz/
|