Soui Button学习一

什么是Soui?

Soui的介绍请查看官方的博客文档,里面有详细的介绍我在这里不多说了,直接上链接:SOUI的介绍

这篇博客主要讲解了Soui的Button的使用,做过UI的都知道Button是最常用的一个控件,经常用到的就是点击一个Button触发一个事件,还有就是对Button的各种属性设置。

以下是我一个例子直接在xml里添加Button的布局:

<SOUI name="mainWindow" maxinset="3,3,3,3" title="@string/title" bigIcon="ICON_LOGO:32" smallIcon="ICON_LOGO:16" margin="5,5,5,5"  resizable="1" wndType="appMain"
minSize="600,400"
appWnd="1"
translucent="1"
>
  <root colorBkgnd="@color/common_bg"  cache="1"  width="600" height="400">
    <caption pos="0,0,-0,100" show="1" font="adding:0" colorBkgnd="@color/main_title" >
      <text pos="10,9" colorText="@color/white">@string/title</text>
      <imgbtn name="btn_close" skin="_skin.sys.btn.close"    pos="-45,0" tip="close" animate="1"/>
      <imgbtn name="btn_max" skin="_skin.sys.btn.maximize"  pos="-83,0" animate="1" />
      <imgbtn name="btn_restore" skin="_skin.sys.btn.restore"  pos="-83,0" show="0" animate="1" />
      <imgbtn name="btn_min" skin="_skin.sys.btn.minimize" pos="-121,0" animate="1" />
    </caption>
    <window layout="vbox" pos="5,[5,-5,-5" colorBkgnd="@color/white"  >
      <window extend_top="5" size="-2,30" layout="hbox" >
        <button name="button1" accel="ctrl+d" id="102" text="快捷键ctrl+d" weight="1" size="0,-2" extend_left="5" drawFocusRect="0"></button>
        <button name="button2"  text="enable(0)" enable="0" weight="1" size="0,-2" extend_left="5" drawFocusRect="0"></button>
        <button name="button3"  text="tip" tip="这是一个tip提示" weight="1" size="0,-2" extend_left="5" drawFocusRect="0"></button>
        <button name="onVisible"  text="visible" weight="1" size="0,-2" extend_left="5" drawFocusRect="0"></button>
        <button name="maxWidth"  text="maxWidth" maxWidth="100" weight="1" size="0,-2" extend_left="5" extend_right="5" drawFocusRect="0"></button>
      </window>
      <window extend_top="5" size="-2,30" layout="hbox" >
        <button align="left" valign="top" text="align" weight="1" size="0,-2" extend_left="5" drawFocusRect="0"></button>
        <button text="colorText" colorText="@color/red"  weight="1" size="0,-2" extend_left="5" drawFocusRect="0"></button>
        <button text="Button3" weight="1" size="0,-2" extend_left="5" drawFocusRect="0"></button>
        <button text="Button4" weight="1" size="0,-2" extend_left="5" drawFocusRect="0"></button>
        <button text="Button5" weight="1" size="0,-2" extend_left="5" extend_right="5" drawFocusRect="0"></button>
      </window>
      <window extend_top="5" size="-2,30" layout="hbox" >
        <button text="Button1" weight="1" size="0,-2" extend_left="5" drawFocusRect="0"></button>
        <button text="Button2" weight="1" size="0,-2" extend_left="5" drawFocusRect="0"></button>
        <button text="Button3" weight="1" size="0,-2" extend_left="5" drawFocusRect="0"></button>
        <button text="Button4" weight="1" size="0,-2" extend_left="5" drawFocusRect="0"></button>
        <button text="Button5" weight="1" size="0,-2" extend_left="5" extend_right="5"  drawFocusRect="0"></button>
      </window>
      <window extend_top="5" size="-2,30" layout="hbox" >
        <button text="Button1" weight="1" size="0,-2" extend_left="5" drawFocusRect="0"></button>
        <button text="Button2" weight="1" size="0,-2" extend_left="5" drawFocusRect="0"></button>
        <button text="Button3" weight="1" size="0,-2" extend_left="5" drawFocusRect="0"></button>
        <button text="Button4" weight="1" size="0,-2" extend_left="5" drawFocusRect="0"></button>
        <button text="Button5" weight="1" size="0,-2" extend_left="5" extend_right="5"  drawFocusRect="0"></button>
      </window>
      <window size="-1,0" weight="1" layout="vbox" >
        <button text="Button1" weight="1" size="-1,0" extend_left="5" drawFocusRect="0"></button>
        <button text="Button2" weight="1" size="-1,0" extend_left="5" drawFocusRect="0"></button>
        <button text="Button3" weight="1" size="-1,0" extend_left="5" drawFocusRect="0"></button>
        <button text="Button4" weight="1" size="-1,0" extend_left="5" drawFocusRect="0"></button>
        <button text="Button5" weight="1" size="-1,0" extend_left="5" drawFocusRect="0"></button>
      </window>
    </window>
  </root>
</SOUI>

效果图如下:

按钮点击是监听处理代码如下:

Button 监听注册的方式:

一、第一种方式

//参数说明:第一个参数xml里Button对应的name的名字 第二个参数回调函数界面上点击是回调触发的函数

EVENT_NAME_COMMAND(L"button1", OnClick) 

第二种方式

//参数说明:多个按钮点击想回调到同一个函数里注册的方式如下。第一个参数:xml里Button对应的name的名字 第二个参数事件ID 第三个参数:回调函数界面上点击是回调触发的函数
EVENT_NAME_HANDLER(L"button1",SOUI::EVT_CMD, onClick1)

EVENT_NAME_HANDLER(L"button2",SOUI::EVT_CMD, onClick1)

EVENT_NAME_HANDLER(L"button3",SOUI::EVT_CMD, onClick1)

回调函数onClick1获取SButton的对象处理方式如下:

void CMainDlg::onClick1(EventArgs *pEvt){
    SButton *pBtn = sobj_cast<SButton>(pEvt->sender);
    SStringT btnName = pBtn->GetWindowText();

    OutputDebugString(btnName);
}

具体代码如下:

MainDlg.h

// MainDlg.h : interface of the CMainDlg class
//
/
#pragma once

class CMainDlg : public SHostWnd
{
public:
	CMainDlg();
	~CMainDlg();

	void OnClose();
	void OnMaximize();
	void OnRestore();
	void OnMinimize();
	void OnClick();
	void onVisible(EventArgs *pEvt);
	void OnSize(UINT nType, CSize size);
	BOOL OnInitDialog(HWND wndFocus, LPARAM lInitParam);

protected:
	//soui消息
	EVENT_MAP_BEGIN()
		EVENT_NAME_COMMAND(L"btn_close", OnClose)
		EVENT_NAME_COMMAND(L"btn_min", OnMinimize)
		EVENT_NAME_COMMAND(L"btn_max", OnMaximize)
		EVENT_NAME_COMMAND(L"btn_restore", OnRestore)
		EVENT_NAME_COMMAND(L"button1", OnClick)
		EVENT_NAME_HANDLER(L"onVisible",SOUI::EVT_CMD, onVisible)
		EVENT_NAME_HANDLER(L"maxWidth",SOUI::EVT_CMD, onVisible)
		
	EVENT_MAP_END()
		
	//HostWnd真实窗口消息处理
	BEGIN_MSG_MAP_EX(CMainDlg)
		MSG_WM_INITDIALOG(OnInitDialog)
		MSG_WM_CLOSE(OnClose)
		MSG_WM_SIZE(OnSize)
		CHAIN_MSG_MAP(SHostWnd)
		REFLECT_NOTIFICATIONS_EX()
	END_MSG_MAP()
};

MainDlg.cpp

// MainDlg.cpp : implementation of the CMainDlg class
//
/

#include "stdafx.h"
#include "MainDlg.h"	
#include "Windows.h"
	
CMainDlg::CMainDlg() : SHostWnd(_T("LAYOUT:XML_MAINWND"))
{
}

CMainDlg::~CMainDlg()
{
}

BOOL CMainDlg::OnInitDialog(HWND hWnd, LPARAM lParam)
{
	return 0;
}
//TODO:消息映射
void CMainDlg::OnClose()
{
	SNativeWnd::DestroyWindow();
}

void CMainDlg::OnMaximize()
{
	SendMessage(WM_SYSCOMMAND, SC_MAXIMIZE);
}
void CMainDlg::OnRestore()
{
	SendMessage(WM_SYSCOMMAND, SC_RESTORE);
}
void CMainDlg::OnMinimize()
{
	SendMessage(WM_SYSCOMMAND, SC_MINIMIZE);
}

void CMainDlg::OnClick(){
	SendMessage(WM_SYSCOMMAND, SC_MAXIMIZE);
}

void CMainDlg::onVisible(EventArgs *pEvt){
	SButton *pBtn = sobj_cast<SButton>(pEvt->sender);
	SStringT btnName = pBtn->GetWindowText();
	OutputDebugString(btnName);
}

void CMainDlg::OnSize(UINT nType, CSize size)
{
	SetMsgHandled(FALSE);	
	SWindow *pBtnMax = FindChildByName(L"btn_max");
	SWindow *pBtnRestore = FindChildByName(L"btn_restore");
	if(!pBtnMax || !pBtnRestore) return;
	
	if (nType == SIZE_MAXIMIZED)
	{
		pBtnRestore->SetVisible(TRUE);
		pBtnMax->SetVisible(FALSE);
	}
	else if (nType == SIZE_RESTORED)
	{
		pBtnRestore->SetVisible(FALSE);
		pBtnMax->SetVisible(TRUE);
	}
}

 

button的属性如下,来自官方文档此处记录供自己查看。

button

按钮控件

自身属性

属性名值类型默认值描述
accelSTRING 快捷按键,如ctrl+d
animateBOOL0是否启用动画效果
animateStepINT25动画的步进值,即每帧增加的不透明度
disableAccelIfInvisibleBOOL0控件隐藏时,是否也能用快捷按键触发
skinSTRING_skin.sys.btn.normaloverride,默认使用SOUI内置按钮皮肤
focusableBOOL1override,默认可获取焦点

继承自window

属性名值类型默认值描述
idINT0控件ID
nameSTRING 控件名称
layoutSTRINGsouiLayout布局样式,支持3种布局
souiLayout 相对布局
gridLayout 网格布局
linearLayout 线性布局(分vbox、hbox两种)
classSTRING 属性集合的名称,定义于style中,类比HTML的class属性
skinSTRING 皮肤样式的名称,定义于skin中
ncSkinSTRING 非客户区的皮肤
textSTRING 显示的文本
tipSTRING 鼠标悬浮时的提示语
trCtxSTRING 翻译名,为空时使用<soui>的trCtx属性值
dataINT0指定一个附加的数据,可通过GetUserData获取
enableBOOL1控件是否可用
focusableBOOL0控件是否可获取焦点
visibleBOOL1控件是否可见
showBOOL1同visible属性
displayBOOL1隐藏时是否占位
0 不占位
1 占位
maxWidthINT-1根据内容自适应大小时的最大宽度
floatBOOL0位置是否固定不动
alphaUINT255控件的透明度(0-255),0为完全透明
layeredWindowBOOL0是否为分层窗口
msgTransparentBOOL0鼠标消息穿透,开启后控件接收不到鼠标和键盘消息
trackMouseEventBOOL0鼠标事件跟踪,捕获子控件的鼠标消息
clipClientBOOL0限制内容只绘制在客户区,开启后超出控件边界的内容会被裁剪掉
cacheBOOL0绘制缓存
0 无缓存,每次刷新时发送WM_PAINT消息重绘
1 创建绘制缓存,只有自己窗口更新才重绘,否则直接调用缓存绘制
drawFocusRectBOOL1是否绘制焦点虚框
multiLinesBOOL0是否支持多行显示
alignSTRINGcenter文本水平对齐方式
left 向左
right 向右
center 居中
valignSTRINGcenter文本垂直对齐方式
top 向上
bottom 向下
middle 居中
colorBkgndCOLOR 背景颜色
colorBorderCOLOR 边框颜色
fontFONT 正常状态的文本字体
fontHoverFONT 悬浮状态的文本字体
fontPushFONT 按下状态的文本字体
fontDisableFONT 禁用状态的文本字体
colorTextCOLOR 正常状态的文本颜色
colorTextHoverCOLOR 悬浮状态的文本颜色
colorTextPushCOLOR 按下状态的文本颜色
colorTextDisableCOLOR 禁用状态的文本颜色
marginINT|SIZE|RECT0外边距(非客户区)的大小
margin-xINT0左右外边距
margin-yINT0上下外边距
paddingINT|SIZE|RECT0内边距的大小
padding_leftINT0左内边距
padding_topINT0上内边距
padding_rightINT0右内边距
padding_bottomINT0下内边距
insetINT|SIZE|RECT0同padding属性
cursorSTRINGarrow鼠标停留时的光标资源,可取值有:
arrow、hand、cross、wait、size、help等
dottedBOOL1文本超出边界时,是否使用末尾...显示

 

源码:https://gitee.com/qhs1573/soui_learning_examples.git

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值