写MiniNote时需要一个文本编辑器,见SDK有UiMutiLineEditPro就直接用了。从目前用下来的结果看,感觉还是封装的不太好,从封装的角度或者说面向对象的角度来说,UiMutiLineEditPro的方法过于复杂,但同时也拥有了灵活性。 本文简单的介绍下UiMutiLineEditPro的使用,一些复杂点的应用需要M8上调试,用模拟器有点困难。 1、创建一个UiMutiLineEditPro控件
- //先申明两个控件
- UiScrollWin m_Scroll;
- UiMultiLineEditPro m_Context;
- //创建的代码
- m_Scroll.SetID(NOTE_UID_SCROLL);
- m_Scroll.SetPos(0, top,GetWidth(), h);
- m_Scroll.EnableDragScrollbarV(true);
- AddUiWin(&m_Scroll);
- top += m_Scroll.GetHeight();
- //初始化编辑器
- m_Context.SetID(NOTE_UID_CONTEXT);
- m_Context.SetPos(0, 0,m_Scroll.GetWidth(), m_Scroll.GetHeight());
- m_Context.SetInsideScroll(true);
- m_Context.EnableGridlines(true);
- m_Scroll.AddChild(&m_Context);
复制代码 不知道为什么单独使用UiMutiLineEditPro时滚动功能有问题,不知道是属性设置不对还是模拟器原因,所以就多加了个UiScrollWin。 2、设置行样式在前面的代码中下面两句就是设置样式的m_Context.SetInsideScroll(true);
设置滚动条是否在控件内部,如在内部,文字超过编辑控件高度出现滚动条,如不在内部,文字超过编辑控件高度,控件会发MZ_WM_UIMUTILINEEDIT_ADDLINE,给父窗口,父窗口需处理该消息,SetPos改变窗口高度.m_Context.EnableGridlines(true);
开启默认表格表,就如同信纸一样,会有一行行的线. 除此之外,还可以设置字体大小SetTextSize、行的高度SsetLineHeight、开启笑脸识别OpenFace等等等等。。。。。。3、文本编辑SetReadOnly:只读SetMaxChars:能输入的最大字符数,默认不限制字符数最大SetText:设置显示的文本AddChar:添加一个字符AddImage:添加一个图片addMultiLineChar:添加多行字符AddString:添加字符串(LPCWSTR)AddText:添加字符串(wstring)InsertText:插入文本AppendString:向文本追加字符串RemoveChar:移除字符RemoveImage:移除图片removeMultiLineChar:移除多行字符4、计算SelectControl m_SelectControl_L;文字选择器左边
SelectControlm_SelectControl_R;文字选择器右边CalcContentTopPosV:滚动条相关实现
CalcContentHeight:计算内容高度CaretInRang :列表控件的内容原点相对于控件的顶部的偏移SelectControl
5、在看代码时发现了UiMutiLineEditPro.h里有很多定义和一些函数挺有用的,如:- std::wstring s2ws(const string& s);这个函数是C++标准函数意思是将string转换为wstring,也就是ansi转换到wsting。
- string wcstombs(const wstring &str);
- 这个函数应该是wstring 转换为 string(MBS) std::wstring Ansi2WChar(LPCSTR pszSrc, intnLen);
- 这个就比较明确了Ansi转换为widestring void string_replace(std::wstring & strBig, const std::wstring & strsrc, const std::wstring &strdst);
- 字符串替换函数
复制代码
还有很多功能待使用下来后再总结。