SOUI知识点小结2
/*
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相关推荐
- python基础知识点小结(2021/2/9)
python基础知识点小结(2021/2/9)持续更新中~~ 入门小知识 cmd 在cmd上进行python,直接输入 python\quad pythonpython 退出cmd输入 exit()\ ...
- C++重要知识点小结---3
C++重要知识点小结---1:http://www.cnblogs.com/heyonggang/p/3246631.html C++重要知识点小结---2:http://www.cnblogs.co ...
- 线性表部分知识点小结
线性表部分知识点小结 ------------------------------------- 开发工具与关键技术:<数据结构与算法> 作者:林敏静 撰写时间:2020年5月6日 --- ...
- 排序算法部分知识点小结
排序算法部分知识点小结 ------------------------------------- 开发工具与关键技术:<数据结构与算法> 作者:林敏静 撰写时间:2020年4月26日 - ...
- C++基础知识点小结
C++基础知识点小结 第一章 绪论 (1)cout 输出流的对象 (2)cin输入对象 (3)endl 输出控制符/操控符 (4)标识符 (5)命名空间(namespace) (6)左值: (7)右值 ...
- python语言基础知识点总结_Python语言的12个基础知识点小结
Python语言的12个基础知识点小结 python编程中常用的12种基础知识总结:正则表达式替换,遍历目录方法,列表按列排序.去重,字典排序,字典.列表.字符串互转,时间对象操作,命令行参数解析(g ...
- 气象统计方法期末知识点小结
气象统计方法知识点小结 小知识点 气象统计诊断的基本步骤 资料收集 资料预处理 选取诊断方法 科学综合与诊断分析 气象统计预测的基本步骤 资料收集 选择合适的统计模型 统计检验 预测结论 一些概念 气 ...
- jdbctemplate 开启事务_SpringBoot 系列教程之事务隔离级别知识点小结
上一篇博文介绍了声明式事务@Transactional的简单使用姿势,最文章的最后给出了这个注解的多个属性,本文将着重放在事务隔离级别的知识点上,并通过实例演示不同的事务隔离级别下,脏读.不可重复读. ...
- C语言指针知识点小结
前期回顾 C语言指针基础知识点(一)–指针及指针变量 C语言指针基础知识点(二)–指针变量的引用 C语言指针基础知识点(三)–指针变量作为函数参数 C语言指针基础知识点(四)–通过指针 ...
- Android 拼图游戏知识点小结
前几天在 慕课网 学习了 Android 拼图游戏小项目.对于我这种初学者来说,想完全搞懂,还是有不少困难的,但通过此项目还是学到了挺多东西.http://blog.csdn.net/lmj62356 ...
最新文章
- 2020-12-17 【 java优先队列的用法】
- 【Curl】 获取网站下载速率(Bytes/s)
- nginx丢弃http包体处理
- 树莓派文字转语音 python_树莓派3-语音-实现文字转语音服务
- angular 字符串转换成数字_Python成为专业人士笔记–String字符串方法
- 如何为Python日志输出着色?
- 白皮 Chapter 1
- C++ static_cast和dynamic_cast
- 区域增长 matlab,图像分割 区域增长
- 蓝绿色——三色配色篇
- PHPStudy安全配置
- 击鼓传花c语言编程题,转身之间——此间的少年画蛇添足版
- HTML+CSS静态页面网页设计作业——咖啡网站pc端带轮播js (5页) 学生酒水网页作业, 生鲜水果网页作业成品, 零食小吃网页作 美食网页业模板
- Vue前端编译问题集
- web连接mysql教程视频_jsp servlet mysql实现的Java web在线商城项目源码附带视频指导运行教程...
- 三维扫描三维建模在数字博物馆中的应用
- 01背包问题,多重背包问题-分组背包问题-完全背包问题-总结-内含4种经典背包问题
- 答题小程序自学(一)
- 超级玛丽2号max即将停售定期?是谣言还是确有其事,有啥影响
- DHL供应链将再投资2.18亿欧元加码中国市场
热门文章
- Solidworks默认模板无效问题?修改字体问题
- OSI七层模型与TCP/IP五层模型
- Git for Windows 国内下载站,发布
- jdk目录详解及其使用方法
- JAVA游戏死神之谜下载_诸神战纪二-死神之谜BT版
- cad插件苹果系统_Hot Door CADtools v12.1.1 for mac(支持AI 2020)
- c# 图像识别 车辆型号【百度AI】
- Linux桌面没有minidwep,ubuntu 12.04完整安装minidwep-gtk教程
- ajax 上传图片进度条,ajax实现图片上传与进度条
- 解锁JMP 15 DOE新功能--组正交超饱和设计(GO SSD)