Compare commits

...

6 Commits

Author SHA1 Message Date
独角戏
ef33751599
Pre Merge pull request !10 from 独角戏/Develope 2025-02-17 03:13:44 +00:00
Polarix
e7978fa417 增加使用CMake编译模拟器的说明 2025-02-17 11:13:27 +08:00
Polarix
3a505a8b79 修正CMake配置文件的注释说明 2025-02-17 11:02:34 +08:00
Polarix
889ba929b8 增加CMake编译配置 2025-02-17 10:54:16 +08:00
Polarix
29bb204479 更新readme文件 2025-02-07 11:41:21 +08:00
gaoxiao
8c393854a7 1.修复刷新函数空指针导致的异常。 2022-09-09 16:53:35 +08:00
5 changed files with 183 additions and 71 deletions

86
CMakeLists.txt Normal file
View File

@ -0,0 +1,86 @@
cmake_minimum_required(VERSION 3.10)
project(simple_gui_demo)
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
set(CMAKE_INSTALL_RPATH "$ORIGIN")
# For compiler
# Default use MinGW-w64
set(CMAKE_C_COMPILER "gcc")
set(CMAKE_CXX_COMPILER "g++")
# SDL2 library path.
set(SDL_DIR D:/Works/dev/libs/SDL/SDL2-2.28.3/x86_64-w64-mingw32)
set(SDL_LIB ${SDL_DIR}/lib)
set(SDL_BIN ${SDL_DIR}/bin)
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build." FORCE)
endif()
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
add_compile_options(-g -O0) #
set(CEF_LIB ${CEF_DIR}/Debug)
elseif(CMAKE_BUILD_TYPE STREQUAL "Release")
add_compile_options(-O3) #
set(CEF_LIB ${CEF_DIR}/Release)
elseif(CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
add_compile_options(-O2 -g) # '
set(CEF_LIB ${CEF_DIR}/Release)
elseif(CMAKE_BUILD_TYPE STREQUAL "MinSizeRel")
add_compile_options(-Os) #
set(CEF_LIB ${CEF_DIR}/Release)
endif()
# C++11
set(CMAKE_CXX_STANDARD 11)
# Header search path.
include_directories(${SDL_DIR}/include/SDL2)
include_directories(${CMAKE_SOURCE_DIR}/GUI/inc)
include_directories(${CMAKE_SOURCE_DIR}/HMI/inc)
include_directories(${CMAKE_SOURCE_DIR}/Simulator/inc)
include_directories(${CMAKE_SOURCE_DIR}/DemoProc/inc)
# Global marco
add_definitions(-DSDL_MAIN_HANDLED)
if(USE_CHS_TEXT)
include_directories(${CMAKE_SOURCE_DIR}/Library/inc)
link_directories(${CMAKE_SOURCE_DIR}/Library/lib64)
add_definitions(-D_SIMPLE_GUI_DEMO_INNER_CHS_)
# add_definitions(-D_SIMPLE_GUI_ENCODE_TEXT_)
endif()
# Library search path.
link_directories(${SDL_LIB})
# Demo source files.
aux_source_directory(DemoProc DEMO_SRC_LIST)
# SimpleGUI library source.
file(GLOB_RECURSE GUI_LIB_SRC_LIST "GUI/src/*.c")
# Static GUI library.
add_library(simplegui STATIC ${GUI_LIB_SRC_LIST})
# SimpleGUI HMI library source.
file(GLOB_RECURSE HMI_LIB_SRC_LIST "HMI/src/*.c")
# Static HMI library.
add_library(simplegui_hmi STATIC ${HMI_LIB_SRC_LIST})
# SimpleGUI demo source.
file(GLOB_RECURSE DEMO_SRC_LIST "DemoProc/src/*.c")
# Other application source
file(GLOB_RECURSE APP_SRC_LIST "Simulator/src/*.cpp")
# Execution file target.
add_executable(simple_gui_demo ${APP_SRC_LIST} ${DEMO_SRC_LIST})
# Append linkage.
target_link_libraries(simple_gui_demo libSDL2.dll.a)
target_link_libraries(simple_gui_demo simplegui)
target_link_libraries(simple_gui_demo simplegui_hmi)
if(USE_CHS_TEXT)
target_link_libraries(simple_gui_demo libiconv64.a)
endif()
# Copy runtime needed.
file(COPY ${SDL_BIN}/SDL2.dll DESTINATION ${CMAKE_BINARY_DIR})

View File

@ -5,8 +5,11 @@
#ifndef _SIMPLE_GUI_DEMO_INNER_CHS_
#include "DemoResource_ASCII.h"
#else
//#include "DemoResource_GB2312.h"
#ifdef _SIMPLE_GUI_ENCODE_TEXT_
#include "DemoResource_UTF8.h"
#else
#include "DemoResource_GB2312.h"
#endif // _SIMPLE_GUI_ENCODE_TEXT_
#endif
extern const SGUI_FONT_RES GB2312_FZXS12;

View File

@ -21,17 +21,32 @@
## 2. 编译和使用模拟器
#### 2.1. 什么是模拟器
  SimpleGUI使用SDL2构建了一个简单的模拟环境除可以演示、预览SimpleGUI外还可以作为脱离硬件平台进行图形界面开发的辅助工具使用。配合SimpleGUI的低耦合性接移植口定义使用模拟器开发的用户界面处理源码几乎额可以无缝的移植到预期的硬件平台上。
  在初次接触SimpleGUI时您可能尚未选定或准备好相应的硬件平台。鉴于这种情况您可以从VirtualSDK开始初步了解SimpleGUI的显示效果以及代码架构。
  在初次接触SimpleGUI时您可能尚未选定或准备好相应的硬件平台。鉴于这种情况您可以从模拟器环境开始初步了解SimpleGUI的显示效果以及代码架构。
#### 2.2. 编译模拟器环境
  SimpleGUI的模拟器工程使用CodeBlocks组织进入Simulator目录打开Simulator.cbp工程文件如果用户下载的是nosetup绿色版的Code::Blocks需要手动建立关联才能直接用双击的方式打开cbp文件否则用户只能先打开Code::Blocks然后从Code::Blocks中执行打开操作以打开工程文件。
#### 2.2. 使用CMake快速完成模拟器的编译
  在使用CMake编译模拟器示例之前需要先修改一下CMakeLists.txt文件找到SDL_DIR变量将变量的值修改为SDL库的实际路径。
``` text
set(SDL_DIR D:/Works/dev/libs/SDL/SDL2-2.28.3/x86_64-w64-mingw32)
```
> 将D:/Works/dev/libs/SDL/SDL2-2.28.3/x86_64-w64-mingw32修改为SDL2库的实际部署路径。
  然后在当前仓库目录下创建一个新文件夹build然后再build目录中打开控制台然后执行以下命令
``` cmd
cmake.exe ../CMakeLists.txt -B ./ -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Debug -DUSE_CHS_TEXT=True
```
> - 要正常再控制台中使用CMake需要将CMake添加到系统的PATH环境变量中。
> - USE_CHS_TEXT=True参数是启用中文演示资源如果不添加此项目演示程序将使用英文显示。
#### 2.3. 使用Codeblocks打开模拟器环境
  SimpleGUI的模拟器也提供了基于Code::Blocks的图形化IDE环境可以方便的进行调试、断点跟踪等等。
  进入Simulator目录打开Simulator.cbp工程文件如果用户下载的是nosetup绿色版的Code::Blocks需要手动建立关联才能直接用双击的方式打开cbp文件否则用户只能先打开Code::Blocks然后从Code::Blocks中执行打开操作以打开工程文件。
  点击工具栏上的编译按钮或按快捷键Ctrl+F9开始编译模拟环境演示工程。
![01-编译工程](images/01/01.png)
  编译完成显示无错误和警告现在点击工具栏上的运行按钮或按快捷键Ctrl+F10就可以看到模拟环境的运行效果了。
![02-运行效果](images/01/02.png)
#### 3.3. 模拟不同型号和外观的屏幕效果
#### 2.4. 模拟不同型号和外观的屏幕效果
  默认情况下模拟器中虚拟显示屏幕的配色方案为黄底黑字的LCD点阵显示屏为最大程度上模拟真实情况下的视觉效果方便创建和调试GUI元素VirtualSDK的LCD面板可以通过修改配置定义修改颜色和尺寸。
  打开模拟器工程修改Simulator\inc\simulator_conf.h文件这里这里是针对模拟器屏幕参数的宏定义意义如下
```c++

View File

@ -128,11 +128,16 @@ HMI_ENGINE_RESULT HMI_StartEngine(const void* pstParameters)
if(NULL != pstStartScreen->pstActions->Prepare)
{
eProcessResult = pstStartScreen->pstActions->Prepare(g_pstActivedEngineObject->Interface, pstParameters);
if( (NULL != g_pstActivedEngineObject->Interface) &&
(NULL != g_pstActivedEngineObject->Interface->fnSyncBuffer))
{
g_pstActivedEngineObject->Interface->fnSyncBuffer();
}
}
}
}
}
else
{
// No activated HMI engine object.

View File

@ -4,7 +4,7 @@
#### 简介
SimpleGUI是一款针对单色显示屏设计的GUI接口库。
SimpleGUI是一款针对单色显示屏设计的GUI绘图接口库。
> ![SimpleGUI在SSD1306主控制器的OLED显示屏上的显示效果](Images/Perview.png "SimpleGUI在SSD1306主控制器的OLED显示屏上的显示效果")
@ -57,6 +57,9 @@ SimpleGUI发布已经有很长时间了在发布后很多人都来询问一
| 06 VirtualSDK概述 | https://www.bilibili.com/video/av87713369/ |
| 07 基于VirtualSDK的GUI开发 | https://www.bilibili.com/video/BV1qz4y12771/ |
#### 补充说明
- 2025-02-07QQ群里很多人都会问wxWidgets环境部署的相关问题确实部署这个图形库在下载选型时就面临各种大坑使用的GCC版本、位模式、开发库还是运行库……一步错步步错所以我更新了模拟器使用SDL2编译需要注意的事项少了很多。至于当时为什么选用wxWidgets开发是因为最初是想把这模拟器当作一个辅助软件来设计的可以模拟屏幕可以截图甚至还可以通过贴图的形式模拟某些设备面板但是实际使用下来我预想的共能用上的不多反而拉高了使用门槛所以弃用。
#### 参与讨论
如果您有意参与SimpleGUI的讨论与改进可以在以下地方留言