C\C++学习 公积金相关帖子汇总 魅族M8SDK学习系列不断更新中 Mini开发小组软件发布

[魅族M8] 魅族M8SDK学习系统之UiMutiLineEditPro

[ 3236 查看 / 7 回复 ]

MiniNote时需要一个文本编辑器,见SDKUiMutiLineEditPro就直接用了。从目前用下来的结果看,感觉还是封装的不太好,从封装的角度或者说面向对象的角度来说,UiMutiLineEditPro的方法过于复杂,但同时也拥有了灵活性。

本文简单的介绍下UiMutiLineEditPro的使用,一些复杂点的应用需要M8上调试,用模拟器有点困难。

1、创建一个UiMutiLineEditPro控件

  1. //先申明两个控件
  2. UiScrollWin m_Scroll;
  3. UiMultiLineEditPro m_Context;

  4. //创建的代码
  5. m_Scroll.SetID(NOTE_UID_SCROLL);
  6. m_Scroll.SetPos(0, top,GetWidth(), h);
  7. m_Scroll.EnableDragScrollbarV(true);
  8. AddUiWin(&m_Scroll);
  9. top += m_Scroll.GetHeight();

  10. //初始化编辑器
  11. m_Context.SetID(NOTE_UID_CONTEXT);
  12. m_Context.SetPos(0, 0,m_Scroll.GetWidth(), m_Scroll.GetHeight());
  13. m_Context.SetInsideScroll(true);
  14. m_Context.EnableGridlines(true);
  15. 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里有很多定义和一些函数挺有用的,如:
  1. std::wstring s2ws(const string& s);这个函数是C++标准函数意思是将string转换为wstring,也就是ansi转换到wsting。
  2. string wcstombs(const wstring &str);
  3. 这个函数应该是wstring 转换为 string(MBS) std::wstring Ansi2WChar(LPCSTR pszSrc, intnLen);
  4. 这个就比较明确了Ansi转换为widestring void string_replace(std::wstring & strBig, const std::wstring & strsrc, const std::wstring &strdst);
  5. 字符串替换函数
复制代码


还有很多功能待使用下来后再总结。




作者:5207
出处:http://www.mini188.com
本文版权归作者所有,欢迎转载请注明出处,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
本主题由 皇帝 5207 于 2009-7-4 11:50:18 执行 主题分类 操作
分享 转发
相信与不相信都是矛盾的.  5207宣!
欢迎您来到点滴论坛
TOP

开启笑脸识别是什么功能啊
m_Context.SetInsideScroll(true);好像静态文本控件不能设滚动条,如果满了一页怎么办啊
TOP

问个很弱的问题,字符串以/0结尾,两个字符串相加,有几个/0啊
TOP

原帖由 zjzj 于 2009-4-10 16:30:00 发表
问个很弱的问题,字符串以/0结尾,两个字符串相加,有几个/0啊


你知道字符串以\0结束,也就是说字符串只以\0结束。
相信与不相信都是矛盾的.  5207宣!
欢迎您来到点滴论坛
TOP

请问这个多行文本编辑器 需要更新的吗,,像列表那样更新才显示
我没有写更新的代码,好像要自己点一下才显示。请问有这类函数吗
TOP

你指什么时候要更新?
相信与不相信都是矛盾的.  5207宣!
欢迎您来到点滴论坛
TOP

m_Context.Invalidate();
        m_Context.Update();
m_Context.SetText(STR2);
这样用了 我想它自动显示文字,可是还是要鼠标点一下编辑框才能显示出来。
------------------------------------------
if(wcsstr(str.c_str(),Str1.c_str())==NULL){
    m_Context.Clear();
想用wcsstr函数查找,,很奇怪数字和英文都好使,中文老得不到理想的,太郁闷了
TOP

原帖由 zjzj 于 2009-4-20 19:53:00 发表
m_Context.Invalidate();
        m_Context.Update();
m_Context.SetText(STR2);
这样用了 我想它自动显示文字,可是还是要鼠标点一下编辑框才能显示出来。
------------------------------------------
if(wcsstr(str.c_str(),Str1.c_str())==NU


按理说SetText后刷新,如果没有刷新的话哪就只能是自己刷新一下。

至于查找中文的问题好像没有用过,我这也试不了不是很清楚哦!
相信与不相信都是矛盾的.  5207宣!
欢迎您来到点滴论坛
TOP