SOUI消息订阅事件实例

功能:实现编辑框和滑块控件之间的数据联动
描述:改变滑块控件的位置 对应的值出现在编辑控件上
 在编辑控件中输入值 对应的改变滑块控件的位置


首先还是在资源文件中 添加对应控件 以及name属性 上一篇【SOUI按钮消息事件】有介绍


在MainDlg.h文件中的EVENT_MAP_BEGIN()与EVENT_MAP_END()中间 添加对应的消息事件


MainDlg.h文件
EVENT_MAP_BEGIN()
//……
EVENT_NAME_HANDLER(L"ScrollTest", EVT_SCROLL, OnNotifyScrollFun)
EVENT_NAME_HANDLER(L"showscrolldata", EVT_RE_NOTIFY, OnNotifyEditFun)
//……
EVENT_MAP_END()
//说明:EVENT_NAME_HANDLER(L"ScrollTest", EVT_SCROLL, OnNotifyScrollFun)
//ScrollTest:控件的name属性
//EVT_SCROLL:滑块控件对应的事件系统参数,在头文件 Events.h中定义
//OnNotifyScrollFun:对应的控件的函数处理


声明对应的消息事件
void OnNotifyScrollFun(EventArgs *pEvt); //显示滑动控件变化的事件
void OnNotifyEditFun(EventArgs *pEvt); //显示编辑控件变化的事件

自定义函数的实现

//改变滑块控件的值 然后将值显示在Edit控件中
void CMainDlg::OnNotifyScrollFun(EventArgs *pEvt)
{
	EventScroll *ptr = sobj_cast<EventScroll>(pEvt);
	SASSERT(ptr);
	int pos = ptr->nPos;
	pEdit = FindChildByName2<SEdit>(L"showscrolldata");
	pEdit->SetWindowTextW(SStringT().Format(L"%d", pos));
	//pScroll = sobj_cast<SScrollBar>(pEvt->sender);
	//SASSERT(pScroll);
	//int pos = pScroll->GetPos();
	//pEdit = FindChildByName2<SEdit>(L"showscrolldata");
	//pEdit->SetWindowTextW(SStringT().Format(L"%d", pos));
}

//改变编辑框的值 让值映射到滑块控件上去 
void CMainDlg::OnNotifyEditFun(EventArgs *pEvt)
{
	pEdit = sobj_cast<SEdit>(pEvt->sender);
	SASSERT(pEdit);
	SStringT strResult = pEdit->GetWindowTextW();
	
	//给编辑框 来设定输入数据的长度
	if (pEdit->GetWindowTextLengthW() > 2)
	{
		//SMessageBox(NULL, L"数据输入不合法,请输入数字,长度不超过2位", L"Tip", MB_OK);
		pEdit->SetWindowTextW(L"");
		return;
	}
	
	for (int i = 0; i < strResult.GetLength(); i++)
	{
		char temp = strResult[0];
		if (temp < '0' || temp > '9')
		{
			//SMessageBox(NULL, L"数据输入不合法,请输入数字,长度不超过2位", L"Tip", MB_OK);
			pEdit->SetWindowTextW(L"");
			return;
		}
	}
	int pos = _ttoi(strResult);
	pScroll = FindChildByName2<SScrollBar>(L"ScrollTest");
	pScroll->SetPos(pos);
	pScroll->Invalidate();  //刷新控件 保证及时显示出控件的位置 这个很重要
}

小结:

1.事件系统的参数 在Event.h文件中 可以得到结果 具体的定义可参照对应的类 在那个Event.h里面有定义

2.对控件(尤其是带有显示改变属性的那种类型)改变状态后 一定要Invalidate更新控件的状态

3.对于消息订阅事件 也就是包含在EVENT_NAME_HANDLER中的定义方法 一定是要带参数的

例如void OnNotifyScrollFun(EventArgs *pEvt); //显示滑动控件变化的事件 对应的消息事件 都是带有参数pEvt的,这个参数
很重要

猜你喜欢

转载自blog.csdn.net/Wuzm_/article/details/80439849
今日推荐