跳转至

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. 生成发布包

  1. 编译 Release 版本
  2. 收集必要文件:
  3. 主程序
  4. SOUI 运行库
  5. 资源文件
  6. 创建安装包或压缩包

下一步

完成基础项目后,您可以:

  1. 添加更多功能:
  2. 打印功能
  3. 文档统计
  4. 编码转换

  5. 改进用户界面:

  6. 添加工具栏
  7. 实现状态栏
  8. 支持多标签页

  9. 学习更多 SOUI5 特性:

  10. 控件开发
  11. 事件处理

参考资源