... | ... | @@ -144,8 +144,7 @@ miniStudio 主要用于原型设计,不建议在正式项目中使用。 |
|
|
|
|
|
函数原型如下:
|
|
|
|
|
|
```
|
|
|
/**
|
|
|
/**
|
|
|
* \fn int GUIAPI ShowCursor (BOOL fShow)
|
|
|
* \brief Shows or hides cursor.
|
|
|
*
|
... | ... | @@ -159,8 +158,7 @@ miniStudio 主要用于原型设计,不建议在正式项目中使用。 |
|
|
*
|
|
|
* \return Cursor showing count value.
|
|
|
*/
|
|
|
MG_EXPORT int GUIAPI ShowCursor (BOOL fShow);
|
|
|
```
|
|
|
MG_EXPORT int GUIAPI ShowCursor (BOOL fShow);
|
|
|
|
|
|
### 如何在未连接任何显示设备的情况下,启动MINIGUI
|
|
|
|
... | ... | @@ -172,27 +170,32 @@ MG_EXPORT int GUIAPI ShowCursor (BOOL fShow); |
|
|
|
|
|
这个需要应用自己处理,比如可以根据不同分辨率定义控件配置数据,在不同分辨率下使用不同的配置
|
|
|
|
|
|
|
|
|
### 主界面画的圆弧边缘有锯齿(如图所示)
|
|
|
|
|
|
建议使用 `mGPlus` 进行绘制。mGPlus 是对 MiniGUI 核心库绘制功能的一个补充,其中包含了常见的 2D 矢量绘图
|
|
|
功能,包括路径、渐变色填充、颜色组合等。
|
|
|
|
|
|
如果有性能问题,可以使用alpha通道的png图片,也可以达到很好的效果。
|
|
|
如果有性能问题,可以使用预先设计的png图片,也可以达到很好的效果。
|
|
|
|
|
|
## 输入设备
|
|
|
|
|
|
### 能否直接支持游戏手柄
|
|
|
我们将在7月份发布MiniGUI 4.0,该版本会提供相关支持
|
|
|
|
|
|
我们即将在2019年7月份正式发布 MiniGUI 4.0,该版本会提供所有输入设备的支持,包括游戏杆、多点触摸屏、手势、平板笔等等。
|
|
|
|
|
|
|
|
|
### 多输入设备的支持
|
|
|
我们将在7月份发布MiniGUI 4.0,该版本会提供相关支持
|
|
|
|
|
|
我们即将在2019年7月份正式发布 MiniGUI 4.0,该版本会提供所有输入设备的支持,包括游戏杆、多点触摸屏、手势、平板笔等等。
|
|
|
|
|
|
### 如何在应用层支持多点触控
|
|
|
我们将在7月份发布MiniGUI 4.0,该版本会提供相关支持
|
|
|
|
|
|
我们即将在2019年7月份正式发布 MiniGUI 4.0,该版本会提供所有输入设备的支持,包括游戏杆、多点触摸屏、手势、平板笔等等。
|
|
|
|
|
|
## 系统功能
|
|
|
|
|
|
### 是否支持系统按键音
|
|
|
|
|
|
按键音与MiniGUI显示没有关系,需要自己实现,可以在收到按键事件(`MSG_KEYDOWN` 和 `MSG_KEYUP`)时自己播放按键音。
|
|
|
|
|
|
### 蓝牙、WiFi功能的对接
|
... | ... | @@ -200,7 +203,7 @@ MG_EXPORT int GUIAPI ShowCursor (BOOL fShow); |
|
|
蓝牙、WiFi功能的部分界面可以参考我们的示例程序,比如 WiFi 选择列表,在 mg-demos 中就有相关的实现。
|
|
|
具体实际功能需要自己对接。
|
|
|
|
|
|
* [WiFi列表示例](https://github.com/VincentWei/mg-demos/tree/master/cbplusui)
|
|
|
[WiFi列表示例](https://github.com/VincentWei/mg-demos/tree/master/cbplusui)
|
|
|
|
|
|
### 丰富字库的支持,包括多国语言的配置及裁剪
|
|
|
|
... | ... | @@ -209,7 +212,7 @@ MiniGUI 支持多种字库及编码, 多语言支持是通过 UNICODE 来实现 |
|
|
|
|
|
转换工具,请访问:
|
|
|
|
|
|
* [字体工具](https://github.com/VincentWei/mg-tools/tree/master/font-tools)
|
|
|
[字体工具](https://github.com/VincentWei/mg-tools/tree/master/font-tools)
|
|
|
|
|
|
|
|
|
### 是否支持文档阅读器,包括常见的PDF、DOC、TXT
|
... | ... | @@ -224,9 +227,7 @@ MiniGUI进程版进程之间的简单通讯可以使用函数 `ClientRequest` |
|
|
|
|
|
函数原型如下:
|
|
|
|
|
|
|
|
|
```
|
|
|
/**
|
|
|
/**
|
|
|
* \fn int ClientRequest (const REQUEST* request, void* result, int len_rslt)
|
|
|
* \brief Sends a request to the server and wait reply.
|
|
|
*
|
... | ... | @@ -248,11 +249,11 @@ MiniGUI进程版进程之间的简单通讯可以使用函数 `ClientRequest` |
|
|
*
|
|
|
* \sa ClientRequestEx, ServerSendReply
|
|
|
*/
|
|
|
static inline int ClientRequest (const REQUEST* request,
|
|
|
static inline int ClientRequest (const REQUEST* request,
|
|
|
void* result, int len_rslt)
|
|
|
|
|
|
|
|
|
/**
|
|
|
/**
|
|
|
* \fn int GUIAPI ServerSendReply (int clifd, const void* reply, int len)
|
|
|
* \brief Sends the reply to the client.
|
|
|
*
|
... | ... | @@ -269,11 +270,11 @@ static inline int ClientRequest (const REQUEST* request, |
|
|
*
|
|
|
* \sa ClientRequest, RegisterRequestHandler
|
|
|
*/
|
|
|
MG_EXPORT int GUIAPI ServerSendReply (int clifd, const void* reply, int len);
|
|
|
MG_EXPORT int GUIAPI ServerSendReply (int clifd, const void* reply, int len);
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
/**
|
|
|
* \fn int serv_listen (const char* name)
|
|
|
* \brief Creates a listen socket.
|
|
|
*
|
... | ... | @@ -289,9 +290,9 @@ MG_EXPORT int GUIAPI ServerSendReply (int clifd, const void* reply, int len); |
|
|
* \note As a convention, you should located the socket in '/var/tmp/'
|
|
|
* directory.
|
|
|
*/
|
|
|
MG_EXPORT int serv_listen (const char* name);
|
|
|
MG_EXPORT int serv_listen (const char* name);
|
|
|
|
|
|
/**
|
|
|
/**
|
|
|
* \fn int serv_accept (int listenfd, pid_t *pidptr, uid_t *uidptr)
|
|
|
* \brief Waits for a client connection to arrive, and accept it.
|
|
|
*
|
... | ... | @@ -312,9 +313,9 @@ MG_EXPORT int serv_listen (const char* name); |
|
|
*
|
|
|
* \sa serv_listen, cli_conn
|
|
|
*/
|
|
|
MG_EXPORT int serv_accept (int listenfd, pid_t *pidptr, uid_t *uidptr);
|
|
|
MG_EXPORT int serv_accept (int listenfd, pid_t *pidptr, uid_t *uidptr);
|
|
|
|
|
|
/**
|
|
|
/**
|
|
|
* \fn int cli_conn (const char* name, char project)
|
|
|
* \brief Used by clients to connect to a server.
|
|
|
*
|
... | ... | @@ -334,15 +335,15 @@ MG_EXPORT int serv_accept (int listenfd, pid_t *pidptr, uid_t *uidptr); |
|
|
*
|
|
|
* \sa serv_listen, serv_accept
|
|
|
*/
|
|
|
MG_EXPORT int cli_conn (const char* name, char project);
|
|
|
MG_EXPORT int cli_conn (const char* name, char project);
|
|
|
|
|
|
#define SOCKERR_IO -1
|
|
|
#define SOCKERR_CLOSED -2
|
|
|
#define SOCKERR_INVARG -3
|
|
|
#define SOCKERR_TIMEOUT -4
|
|
|
#define SOCKERR_OK 0
|
|
|
#define SOCKERR_IO -1
|
|
|
#define SOCKERR_CLOSED -2
|
|
|
#define SOCKERR_INVARG -3
|
|
|
#define SOCKERR_TIMEOUT -4
|
|
|
#define SOCKERR_OK 0
|
|
|
|
|
|
/**
|
|
|
/**
|
|
|
* \fn int sock_write_t (int fd, const void* buff,\
|
|
|
int count, unsigned int timeout)
|
|
|
* \brief Writes data to socket.
|
... | ... | @@ -370,10 +371,10 @@ MG_EXPORT int cli_conn (const char* name, char project); |
|
|
*
|
|
|
* \sa sock_read_t
|
|
|
*/
|
|
|
MG_EXPORT int sock_write_t (int fd, const void* buff,
|
|
|
MG_EXPORT int sock_write_t (int fd, const void* buff,
|
|
|
int count, unsigned int timeout);
|
|
|
|
|
|
/**
|
|
|
/**
|
|
|
* \fn int sock_read_t (int fd, void* buff, int count, unsigned int timeout)
|
|
|
* \brief Reads data from socket.
|
|
|
*
|
... | ... | @@ -400,26 +401,23 @@ MG_EXPORT int sock_write_t (int fd, const void* buff, |
|
|
*
|
|
|
* \sa sock_write_t
|
|
|
*/
|
|
|
MG_EXPORT int sock_read_t (int fd, void* buff, int count, unsigned int timeout);
|
|
|
MG_EXPORT int sock_read_t (int fd, void* buff, int count, unsigned int timeout);
|
|
|
|
|
|
/**
|
|
|
/**
|
|
|
* \def sock_write(fd, buff, count)
|
|
|
* \brief The blocking version of \a sock_write_t function.
|
|
|
*
|
|
|
* \sa sock_write_t
|
|
|
*/
|
|
|
#define sock_write(fd, buff, count) sock_write_t(fd, buff, count, 0)
|
|
|
#define sock_write(fd, buff, count) sock_write_t(fd, buff, count, 0)
|
|
|
|
|
|
/**
|
|
|
/**
|
|
|
* \def sock_read(fd, buff, count)
|
|
|
* \brief The blocking version of \a sock_read_t function.
|
|
|
*
|
|
|
* \sa sock_read_t
|
|
|
*/
|
|
|
#define sock_read(fd, buff, count) sock_read_t(fd, buff, count, 0)
|
|
|
|
|
|
|
|
|
```
|
|
|
#define sock_read(fd, buff, count) sock_read_t(fd, buff, count, 0)
|
|
|
|
|
|
### 是否支持直接应用截图保存
|
|
|
|
... | ... | @@ -427,8 +425,7 @@ MG_EXPORT int sock_read_t (int fd, void* buff, int count, unsigned int timeout); |
|
|
|
|
|
函数原型如下:
|
|
|
|
|
|
```
|
|
|
/**
|
|
|
/**
|
|
|
* \fn BOOL GUIAPI SaveScreenRectContent (const RECT* rc, \
|
|
|
const char* filename)
|
|
|
* \brief Saves content of a rectangle in the screen to a file.
|
... | ... | @@ -446,9 +443,8 @@ MG_EXPORT int sock_read_t (int fd, void* buff, int count, unsigned int timeout); |
|
|
*
|
|
|
* \sa bmp_load_fns
|
|
|
*/
|
|
|
MG_EXPORT BOOL GUIAPI SaveScreenRectContent (const RECT* rcWin,
|
|
|
MG_EXPORT BOOL GUIAPI SaveScreenRectContent (const RECT* rcWin,
|
|
|
const char* filename);
|
|
|
```
|
|
|
|
|
|
### 支持中英文输入法
|
|
|
|
... | ... | @@ -467,8 +463,7 @@ mg-demos 中的 softkbd 提供了中英文输入法的示例,可以直接使 |
|
|
|
|
|
函数原型如下:
|
|
|
|
|
|
```
|
|
|
/**
|
|
|
/**
|
|
|
* \fn BOOL GUIAPI InvalidateRect (HWND hWnd, const RECT* prc, BOOL bEraseBkgnd)
|
|
|
* \brief Makes a rectangle region in the client area of a window invalid.
|
|
|
*
|
... | ... | @@ -486,10 +481,9 @@ mg-demos 中的 softkbd 提供了中英文输入法的示例,可以直接使 |
|
|
*
|
|
|
* \sa MSG_PAINT
|
|
|
*/
|
|
|
MG_EXPORT BOOL GUIAPI InvalidateRect (HWND hWnd,
|
|
|
MG_EXPORT BOOL GUIAPI InvalidateRect (HWND hWnd,
|
|
|
const RECT* prc, BOOL bEraseBkgnd);
|
|
|
|
|
|
```
|
|
|
|
|
|
### 页面存在较多按钮控件时 刷新页面时会有短暂白屏?
|
|
|
|
... | ... | @@ -502,19 +496,26 @@ MG_EXPORT BOOL GUIAPI InvalidateRect (HWND hWnd, |
|
|
### 主界面刷新的时候,有时候有闪烁状态
|
|
|
|
|
|
所在窗口背景绘制过于耗时或按钮本身绘制过于耗时会出现白屏现象。
|
|
|
在 MiniGUI 3.0及以上版本, 可以通过为窗口增加 `WS_EX_AUTOSECONDARYDC` 属性启用双缓冲,
|
|
|
在 MiniGUI 3.0及以上版本, 可以通过为窗口增加 `WS_EX_AUTOSECONDARYDC` 风格启用双缓冲,
|
|
|
这样可以解决白屏闪烁问题,但同时会消耗更多的内存。
|
|
|
|
|
|
建议在编程时只刷新必要的区域,这样也能降低白屏出现的机率。
|
|
|
建议在编程时只刷新必要的区域(在调用 InvalidateRect 函数时,传入需要刷新的最小矩形),
|
|
|
这样也能降低白屏出现的机率。
|
|
|
|
|
|
## 文档
|
|
|
|
|
|
### 希望有中文文档
|
|
|
|
|
|
以前有中英文两种版本,后来考虑工作量问题,就只维护了英文文档;
|
|
|
为什么选英文?
|
|
|
因为现有的翻译工具(比如Google)能将英文文档比较准确的翻译成中文文档,反之则不然,所以最终我们选择维护英文文档。
|
|
|
以前有中英文两种版本,后来考虑工作量问题,就只维护了英文文档;目前在老的 Wiki 站点:
|
|
|
|
|
|
http://wiki.minigui.com/twiki/bin/view/Products/WebHome
|
|
|
|
|
|
仍然可以看到这些文档。但从 MiniGUI 3.2 开始,我们选择只维护英文文档,因为现有的翻译
|
|
|
工具(比如 https://translate.google.cn 或者 Chrome 浏览器的网页翻译功能),能将英文文档
|
|
|
比较准确地翻译成中文文档,反之则不然,所以我们选择维护英文文档。
|
|
|
|
|
|
## 其它
|
|
|
欢迎致信 `sales@minigui.com` 购买我们的VIP支持服务,解决您在开发 MiniGUI 应用过程中的所有疑难问题。
|
|
|
|
|
|
欢迎致信 `sales@minigui.com` 购买我们的VIP支持服务,解决您在开发 MiniGUI 应用过程中的
|
|
|
疑难问题。
|
|
|
|