/*
2018-8-27 15:21:21
在SOUI工程中关于定时器的使用
*/
CSimpleWnd::SetTimer(定时器的ID,间隔时间,NULL);
CSimpleWnd::KillTimer(定时器的ID);

/*
2018-8-31 14:31:22
使用zip打包
*/
修改资源后 需要将idx文件重新编译一遍,才能将资源加载进入
通过点击事件 进行一个控件的刷新可以得到一个新的状态
从PE加载修改到zip加载需要修改idx的属性和程序入口的设置
使idx属性与设置密码一致

/*
2018-9-11 10:50:20
使用动态的一个动画的形式 显示一些图标
*/
<!--注意autorun,-1为默认,不自动播放,鼠标移上才播放,0表示无间隔循环播放,大于0表示暂停xx秒循环播放-->
<anmimg name="abc" ani_in="skin.anim.logo1" interval="50" pos="-178,25" autorun="2"/>
<anmimg name="def" ani_in="skin.anim.logo2" interval="120" pos="-178,25" autorun="0"/>

/*
2018-9-11 11:49:09
在SOUI中char *到SStringT 之间的转换
*/
SOUI中的一个字符转换

#ifdef UNICODE
#define S_CA2T S_CA2W
#define S_CT2A S_CW2A
#define S_CW2T S_CW2W
#define S_CT2W S_CW2W
#else
#define S_CA2T S_CA2A
#define S_CT2A S_CA2A
#define S_CW2T S_CW2A
#define S_CT2W S_CA2W
#endif // UNICODE

对于得到的结果进行一个转换
strcpcvt.h

S_CT2A     从SStringT 转换到 string类型
S_CA2T    从string类型 转换到 SStringT类型

S_CT2W    从SStringT 转换到 wstring类型
S_CW2T    从wstring类型 转换到 SStringT类型

/*
2018-9-14 09:47:26
SOUI中使用 animaeing动画插件的用法
*/
例子:
<animateimg pos="-100%,12%,-60%,-28%" size="96, 96" autostart="1" speed="100" skin="skin_animate_png" />
这样就能够在界面中显示动画的一个效果了 加上布局使用的百分比 可以在拉伸的时候实现控件同步的效果

/*
2018-9-14 09:50:40
界面布局的方法
*/
“|”代表参考父窗口的中心;如|-10 代表在父窗口的中心向左/上偏移 10 象素。
“%”代表在父窗口的百分比,可以是小数,负数。如:%40 代表在父窗口的 40%位置,%-40则等价于(1-40%)。
“[”相对于前一兄弟窗口。用于 X 时,参考前一兄弟窗口的 right,用于 Y 时参考前一兄弟窗口的 bottom
“]”相对于后一兄弟窗口。用于 X 时,参考后一兄弟的 left,用于 Y 时参考后一兄弟的 top
“{”相对于前一兄弟窗口。用于 X 时,参考前一兄弟窗口的 left,用于 Y 时参考前一兄弟窗口的top
“}”相对于后一兄弟窗口。用于 X 时,参考后一兄弟的 right,用于 Y 时参考后一兄弟的 bottom
“@”标志用来指定窗口的大小,只能出现在 pos 属性的第 3,4 个值中,用来标识窗口的宽度

/*
2018-9-27 17:19:52
更换SOUI的图标
*/
直接在uires.idx文件中修改对应的值

/*
2018-10-16 15:35:34
使用类似MFC的相同方法打开某个文件的方法
CFileDialogEx
*/
使用这个函数进行文件的打开

class CFileDialogEx
{
public:

OPENFILENAME m_ofn;
    BOOL m_bOpenFileDialog;            // TRUE for file open, FALSE for file save
    TCHAR m_szFileTitle[_MAX_FNAME];   // contains file title after return
    TCHAR m_szFileName[_MAX_PATH];     // contains full path name after return

CFileDialogEx(BOOL bOpenFileDialog, // TRUE for FileOpen, FALSE for FileSaveAs
        LPCTSTR lpszDefExt = NULL,
        LPCTSTR lpszFileName = NULL,
        DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT ,
        LPCTSTR lpszFilter = NULL,
        HWND hWndParent = NULL)
    {
        memset(&m_ofn, 0, sizeof(m_ofn)); // initialize structure to 0/NULL
        m_szFileName[0] = _T('\0');
        m_szFileTitle[0] = _T('\0');

m_bOpenFileDialog = bOpenFileDialog;
        m_ofn.lStructSize = sizeof(m_ofn);
        m_ofn.lpstrFile = m_szFileName;
        m_ofn.nMaxFile = _MAX_PATH;
        m_ofn.lpstrDefExt = lpszDefExt;
        m_ofn.lpstrFileTitle = (LPTSTR)m_szFileTitle;
        m_ofn.nMaxFileTitle = _MAX_FNAME;
        m_ofn.Flags = dwFlags | OFN_EXPLORER | OFN_ENABLEHOOK | OFN_ENABLESIZING| OFN_NOCHANGEDIR;
        m_ofn.lpstrFilter = lpszFilter;
        m_ofn.hwndOwner = hWndParent;

// setup initial file name
        if(lpszFileName != NULL)
            _tcscpy_s(m_szFileName, _countof(m_szFileName), lpszFileName);
    }

INT_PTR DoModal(HWND hWndParent = ::GetActiveWindow())
    {
        if(m_ofn.hwndOwner == NULL)   // set only if not specified before
            m_ofn.hwndOwner = hWndParent;

if(m_bOpenFileDialog)
            return ::GetOpenFileName(&m_ofn);
        else
            return ::GetSaveFileName(&m_ofn);
    }
};

/*
2018-10-18 10:07:22
关于在SOUI中热键的使用
*/
对于快捷键的设计
例子如下: 按下Ctrl + A 就会响应 "有按键按下的消息事件"
    if (nChar == 0x41 && (GetKeyState(VK_CONTROL) & 0x8000))    //VK_CONTROL
    {
        SMessageBox(NULL, L"有按键按下", L"提示", MB_OK);
    }
需要逆向操作一波 才能 快速的响应Ctrl + A 
引发了一个问题
就是GetKeyState是否优先于OnKeyDown现获取了按下的键的消息

最后得出结论

if ((GetKeyState(0x41) & 0x8000) && (GetKeyState(VK_CONTROL) & 0x8000))    //VK_CONTROL
    {
        SMessageBox(NULL, L"有按键按下", L"提示", MB_OK);
    }
    
这样才比较快(无论是VK_CONTROL 放前面还是后面)

参考SOUI demo SHostKeyCtrl

/*
2018-10-22 10:39:27
通过文件加载资源
*/
SHostDialog fileDlg(_T("file:test.xml"));
fileDlg.DoModal(m_hWnd);

完整的加载方式:
SStringT strCurDir = SApplication::getSingleton().GetAppDir();
    strCurDir += _T("\\filewnd");
    SetCurrentDirectory(strCurDir);
    if (GetFileAttributes(_T("test.xml")) == INVALID_FILE_ATTRIBUTES)
    {
        SMessageBox(m_hWnd, _T("没有找到资源文件!"), _T("错误"), MB_OK | MB_ICONSTOP);
        return;
    }
    SHostDialog fileDlg(_T("file:test.xml"));
    fileDlg.DoModal(m_hWnd);

/*
2018-11-26 10:04:48
记录下使用STileView 的相关知识点
*/
首先是XML的配置问题
tileview:需要增加name配置属性
template:修饰增加显示Item的宽高 以及鼠标放置在上面的一些属性 颜色设置

免注册使用自定义消息事件的方法:
实验:
弄一个空的windows控件拖放到界面上 设置背景色为紫色,name="TestEvent" 在MainDlg中增加如下代码
SWindow *pWnd = FindChildByName2<SWindow>("TestEvent");
pWnd->GetEventSet()->subscribeEvent(EVT_CMD, Subscriber(&CMainDlg::OnButtonClick, this));

bool CMainDlg::OnButtonClick(EventArgs * pEvt)
{
    SMessageBox(NULL, L"测试使用自定义消息事件", L"tip", MB_OK);
    return false;
}

/*
2018-11-27 15:12:58
使用link 跳转到对应的界面
*/
<link pos="10,130" maxWidth="100" class="cls_btn_weblink" dotted="1" href="www.setoutsoft.cn">www.setoutsoft.cn</link>

使用link 可以跳转到对应的位置

补充:计算时间的角度
关键点:
    时针角度 需要小时和分钟 加起来的角度
    分针角度 只需要看分钟即可
    
时针计算角度:分成12等份
分针计算角度:分成60等份

计算时针角度:
double base = (double)(nHour % 12) * ((double)360 / 12);
base += (double)nMinute * ((double)360 / 12 / 60);

计算分针角度:
(double)nValue * ((double)360 / 60);

/*
2018-11-28 16:14:32
SOUI中常用的系统消息
*/
1.Create消息    应用场景:在控件中包含控件的时候 可以用来进行一些初始化操作
MSG_WM_CREATE(OnCreate)    //系统最先调用这个 用来初始化相关操作
int OnCreate(LPCREATESTRUCT lpCreateStruct)

2.Paint消息        应用场景:需要自定义一些控件的图像
MSG_WM_PAINT_EX(OnPaint) //自绘常用的一个消息 
void OnPaint(SOUI::IRenderTarget * pRT)

3.Char 消息        应用场景:适用键盘输入的事件
MSG_WM_CHAR(OnChar)    //监听键盘的一个按下的事件 当键盘按下会触发
void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)

基础知识补充:
multiLines 这个属性用于text中或者Edit中 常用来表示是否需要多行显示
这个属性=1的时候 会自动识别\n =0的时候 将不会识别\n

number="1" 通过设置这个属性 可以使Edit中的内容仅为数字

password="1" 通过设置这个 可以使Edit中的文本以密码的形式显示

trackMouseEvent="1" 通过设置这个属性 可以很捕获到鼠标的一些事件(例如:当鼠标离开或者进入按钮 按钮的状态变化)

/*
2018-12-3 14:55:09
使用SOUI中的控件titleview记录
参照SOUI工程中的demos\demo
*/
控件titleview包含在类 STitleView中

xml部分:
<tileview size="576, 240" name="TestTitle" wantTab="1" marginSize="5" pos="8,112" colorBkgnd="#FFFFFF" colorHover="#ffc0cbff">
    <template itemHeight="50" itemWidth="50" colorHover="#FFFFFF" colorSelected="#FFFFFF" trackMouseEvent="1">
        <Button pos="|0,[5,@115,@22" size="50,50" offset="-0.5,0" name="btn_test" colorBorder="#BCC0CB" margin-x="1" margin-y="1" trackMouseEvent="1" skin="_skin.sys.wnd.bkgnd" />
    </template>
</tileview>

组成 由 titleview 和 template 组成
代码片段:(在mainDlg类的OnInitDialog中进行初始化操作)
//关于titleview的使用
    STileView *pTileView = FindChildByName2<STileView>("TestTitle");
    if (pTileView)
    {
        std::vector<SStringT> vctInfo{ L"Test1",L"Fun1", L"Ming", L"Get" };
        CTestTileAdapter *pAdapter = new CTestTileAdapter(vctInfo);
        pTileView->SetAdapter(pAdapter);
        pAdapter->Release();
    }

这里需要注意的就是 CTestTileAdapter 这个类。这个类继承自SAdapterBase
CTestTileAdapter 类定义:

#pragma once
#include "helper/SAdapterBase.h"
#include <vector>
namespace SOUI
{
    class CTestTileAdapter : public SAdapterBase
    {
    public:
        CTestTileAdapter(std::vector<SStringT> vctInfo):m_VctInfo(vctInfo)
        {

}
        ~CTestTileAdapter()
        {
            if (m_VctInfo.size() > 0)
            {
                m_VctInfo.swap(std::vector<SStringT>());
            }
        }

virtual int getCount()
        {
            return m_VctInfo.size();
        }

virtual void getView(int position, SWindow *pItem, pugi::xml_node xmlTemplate)
        {
            if (pItem->GetChildrenCount() == 0)
            {
                pItem->InitFromXml(xmlTemplate);
            }

SButton *pBtn = pItem->FindChildByName2<SButton>(L"btn_test");
            pBtn->SetWindowText(SStringT().Format(_T("%s"), m_VctInfo[position]));
            pBtn->GetRoot()->SetUserData(position);
            pBtn->GetEventSet()->subscribeEvent(EVT_CMD, Subscriber(&CTestTileAdapter::OnButtonClick, this));
        }

bool OnButtonClick(EventArgs *pEvt)
        {
            SButton *pBtn = sobj_cast<SButton>(pEvt->sender);
            int iItem = pBtn->GetRoot()->GetUserData();        //获取到第几个
            SStringT btnName = pBtn->GetWindowText();
            SMessageBox(NULL, SStringT().Format(_T("button of %d item was clicked\nbutton of name: %s"), iItem, btnName), _T("haha"), MB_OK);
            return true;
        }

private:
        std::vector<SStringT> m_VctInfo;

};

/*
2018-12-3 15:31:39
关于SOUI中属性的设置
*/
SOUI_ATTRS_BEGIN()
    ATTR_CUSTOM(L"accel",OnAttrAccel)
    ATTR_INT(L"animate", m_bAnimate, FALSE)
SOUI_ATTRS_END()
    
例子:
    SOUI_ATTRS_BEGIN()
        ATTR_INT(L"length", m_Length, FALSE)
    SOUI_ATTRS_END()
在自定义的Edit控件中 加入限制长度的条件 就可以用到属性这个
在XML中设置需要的length 就可以将值 传递给 m_Length

SOUI知识点小结2相关推荐

  1. python基础知识点小结(2021/2/9)

    python基础知识点小结(2021/2/9)持续更新中~~ 入门小知识 cmd 在cmd上进行python,直接输入 python\quad pythonpython 退出cmd输入 exit()\ ...

  2. C++重要知识点小结---3

    C++重要知识点小结---1:http://www.cnblogs.com/heyonggang/p/3246631.html C++重要知识点小结---2:http://www.cnblogs.co ...

  3. 线性表部分知识点小结

    线性表部分知识点小结 ------------------------------------- 开发工具与关键技术:<数据结构与算法> 作者:林敏静 撰写时间:2020年5月6日 --- ...

  4. 排序算法部分知识点小结

    排序算法部分知识点小结 ------------------------------------- 开发工具与关键技术:<数据结构与算法> 作者:林敏静 撰写时间:2020年4月26日 - ...

  5. C++基础知识点小结

    C++基础知识点小结 第一章 绪论 (1)cout 输出流的对象 (2)cin输入对象 (3)endl 输出控制符/操控符 (4)标识符 (5)命名空间(namespace) (6)左值: (7)右值 ...

  6. python语言基础知识点总结_Python语言的12个基础知识点小结

    Python语言的12个基础知识点小结 python编程中常用的12种基础知识总结:正则表达式替换,遍历目录方法,列表按列排序.去重,字典排序,字典.列表.字符串互转,时间对象操作,命令行参数解析(g ...

  7. 气象统计方法期末知识点小结

    气象统计方法知识点小结 小知识点 气象统计诊断的基本步骤 资料收集 资料预处理 选取诊断方法 科学综合与诊断分析 气象统计预测的基本步骤 资料收集 选择合适的统计模型 统计检验 预测结论 一些概念 气 ...

  8. jdbctemplate 开启事务_SpringBoot 系列教程之事务隔离级别知识点小结

    上一篇博文介绍了声明式事务@Transactional的简单使用姿势,最文章的最后给出了这个注解的多个属性,本文将着重放在事务隔离级别的知识点上,并通过实例演示不同的事务隔离级别下,脏读.不可重复读. ...

  9. C语言指针知识点小结

    前期回顾   C语言指针基础知识点(一)–指针及指针变量   C语言指针基础知识点(二)–指针变量的引用   C语言指针基础知识点(三)–指针变量作为函数参数   C语言指针基础知识点(四)–通过指针 ...

  10. Android 拼图游戏知识点小结

    前几天在 慕课网 学习了 Android 拼图游戏小项目.对于我这种初学者来说,想完全搞懂,还是有不少困难的,但通过此项目还是学到了挺多东西.http://blog.csdn.net/lmj62356 ...

最新文章

  1. 2020-12-17 【 java优先队列的用法】
  2. 【Curl】 获取网站下载速率(Bytes/s)
  3. nginx丢弃http包体处理
  4. 树莓派文字转语音 python_树莓派3-语音-实现文字转语音服务
  5. angular 字符串转换成数字_Python成为专业人士笔记–String字符串方法
  6. 如何为Python日志输出着色?
  7. 白皮 Chapter 1
  8. C++ static_cast和dynamic_cast
  9. 区域增长 matlab,图像分割 区域增长
  10. 蓝绿色——三色配色篇
  11. PHPStudy安全配置
  12. 击鼓传花c语言编程题,转身之间——此间的少年画蛇添足版
  13. HTML+CSS静态页面网页设计作业——咖啡网站pc端带轮播js (5页) 学生酒水网页作业, 生鲜水果网页作业成品, 零食小吃网页作 美食网页业模板
  14. Vue前端编译问题集
  15. web连接mysql教程视频_jsp servlet mysql实现的Java web在线商城项目源码附带视频指导运行教程...
  16. 三维扫描三维建模在数字博物馆中的应用
  17. 01背包问题,多重背包问题-分组背包问题-完全背包问题-总结-内含4种经典背包问题
  18. 答题小程序自学(一)
  19. 超级玛丽2号max即将停售定期?是谣言还是确有其事,有啥影响
  20. DHL供应链将再投资2.18亿欧元加码中国市场

热门文章

  1. Solidworks默认模板无效问题?修改字体问题
  2. OSI七层模型与TCP/IP五层模型
  3. Git for Windows 国内下载站,发布
  4. jdk目录详解及其使用方法
  5. JAVA游戏死神之谜下载_诸神战纪二-死神之谜BT版
  6. cad插件苹果系统_Hot Door CADtools v12.1.1 for mac(支持AI 2020)
  7. c# 图像识别 车辆型号【百度AI】
  8. Linux桌面没有minidwep,ubuntu 12.04完整安装minidwep-gtk教程
  9. ajax 上传图片进度条,ajax实现图片上传与进度条
  10. 解锁JMP 15 DOE新功能--组正交超饱和设计(GO SSD)