SOUI5 项目创建指南¶
本教程将指导您创建第一个 SOUI5 项目。
项目概述¶
我们将创建一个简单的记事本应用,包含以下功能: - 文本编辑 - 文件保存/打开 - 简单的格式设置
准备工作¶
环境检查¶
- 确保已安装 Visual Studio
- 配置好 SOUI5 开发环境
- 准备好 SoUIEditor 工具
创建项目目录¶
MyNotepad/
├── proj/ # 项目文件
├── res/ # 资源文件
│ ├── icons/ # 图标资源
│ ├── layout/ # 布局文件
│ └── values/ # 配置文件
└── src/ # 源代码
创建项目¶
SOUI5 提供了多种创建项目的方式:
1. 使用向导创建¶
参考 向导项目创建 文档,使用 Visual Studio 向导快速创建 SOUI5 项目。
2. 使用 CmakeApp 模板创建¶
参考 CmakeApp 模板创建 文档,使用 CmakeApp 模板创建跨平台的 SOUI5 项目。这是推荐的现代开发方式,支持 Windows、Linux 和 macOS 平台。
3. 手动创建¶
参考 手动项目创建 文档,从零开始手动创建 SOUI5 项目,适用于需要完全控制项目结构的场景。
选择合适的创建方式¶
使用向导创建的适用场景¶
- Windows 平台开发
- 快速原型开发
- 熟悉 Visual Studio 开发环境
使用 CmakeApp 模板的适用场景¶
- 跨平台应用开发
- 现代 CMake 构建系统
- 需要灵活的构建配置
- 团队协作开发
手动创建的适用场景¶
- 对项目结构有特殊要求
- 集成到现有项目中
- 需要深度定制构建流程
实现基本功能¶
1. 主窗口类¶
MainDlg.h
#pragma once
#include <core/shostdialog.h>
class CMainDlg : public SHostDialog
{
public:
CMainDlg();
~CMainDlg();
protected:
// 事件处理映射表
EVENT_MAP_BEGIN()
EVENT_NAME_COMMAND(L"btn_file_open", OnBtnOpenFile)
EVENT_NAME_COMMAND(L"btn_file_save", OnBtnSaveFile)
EVENT_MAP_END()
// 事件处理函数
void OnBtnOpenFile();
void OnBtnSaveFile();
// 消息映射表
BEGIN_MSG_MAP_EX(CMainDlg)
MSG_WM_INITDIALOG(OnInitDialog)
CHAIN_MSG_MAP(SHostDialog)
END_MSG_MAP()
// 消息处理函数
BOOL OnInitDialog(HWND wnd, LPARAM lParam);
};
2. 实现文件操作¶
MainDlg.cpp
#include "MainDlg.h"
#include <helper/SMenu.h>
#include <helper/SMenuEx.h>
CMainDlg::CMainDlg() : SHostDialog(_T("LAYOUT:XML_MAINWND"))
{
}
CMainDlg::~CMainDlg()
{
}
BOOL CMainDlg::OnInitDialog(HWND wnd, LPARAM lParam)
{
// 初始化代码
return 0;
}
void CMainDlg::OnBtnOpenFile()
{
// 打开文件对话框
CFileDialogEx openDlg(TRUE, _T("txt"), _T(""),
OFN_HIDEREADONLY|OFN_FILEMUSTEXIST,
_T("文本文件(*.txt)\0*.txt\0所有文件(*.*)\0*.*\0"));
if (openDlg.DoModal() == IDOK)
{
// 读取文件内容
SRichEdit *pEdit = FindChildByName2<SRichEdit>(L"edit_content");
if (pEdit)
{
// 实现文件读取逻辑
}
}
}
void CMainDlg::OnBtnSaveFile()
{
// 保存文件对话框
CFileDialogEx saveDlg(FALSE, _T("txt"), _T(""),
OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
_T("文本文件(*.txt)\0*.txt\0所有文件(*.*)\0*.*\0"));
if (saveDlg.DoModal() == IDOK)
{
SRichEdit *pEdit = FindChildByName2<SRichEdit>(L"edit_content");
if (pEdit)
{
// 实现文件保存逻辑
}
}
}
添加高级功能¶
1. 实现文本格式化¶
void CMainDlg::OnFormatText()
{
SRichEdit *pEdit = FindChildByName2<SRichEdit>(L"edit_content");
if (pEdit)
{
// 获取选中文本
SStringT strText = pEdit->GetSelectedText();
// 应用格式
CHARFORMAT2 cf;
ZeroMemory(&cf, sizeof(CHARFORMAT2));
cf.cbSize = sizeof(CHARFORMAT2);
cf.dwMask = CFM_BOLD | CFM_COLOR;
cf.dwEffects = CFE_BOLD;
cf.crTextColor = RGB(0,0,255);
// 设置格式
pEdit->SetSelectionCharFormat(cf);
}
}
2. 添加查找替换功能¶
void CMainDlg::OnFindText()
{
// 创建查找对话框
if (!m_pFindDlg)
{
m_pFindDlg = new SFindDlg(this);
m_pFindDlg->Create();
}
m_pFindDlg->ShowWindow(SW_SHOW);
}
打包发布¶
1. 资源打包¶
使用 ResBuilder 工具打包资源:
ResBuilder.exe -i uires.idx -p skin.zip -r ..\res
2. 生成发布包¶
- 编译 Release 版本
- 收集必要文件:
- 主程序
- SOUI 运行库
- 资源文件
- 创建安装包或压缩包
下一步¶
完成基础项目后,您可以: