功能:实现编辑框和滑块控件之间的数据联动
描述:改变滑块控件的位置 对应的值出现在编辑控件上
在编辑控件中输入值 对应的改变滑块控件的位置
首先还是在资源文件中 添加对应控件 以及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的,这个参数
很重要