您的位置:首页 > 产品设计 > UI/UE

魅族m8开发 step by step(3)(BasicControl)

2009-11-15 00:10 337 查看
    接上篇,下面看下来就比较简单了,本示例为牵涉到下面新的控件
UiSingleLineEdit 其实就是TextBox
UiToolbar_Text 一个ToolBar
CPopupMenu 一个弹出菜单

一.首先窗体初始化

// 从?CMzWndEx 派?生?的?主?窗?口?类?
class CSample1MainWnd: public CMzWndEx
{
MZ_DECLARE_DYNAMIC(CSample1MainWnd);
public:
// 窗?口?中?的?按?钮?控?件?
UiButton m_btn;

// 文?字?按?钮?工?具?条?
UiToolbar_Text m_Toolbar;

// 单?行?编?辑?器?
UiSingleLineEdit m_Edit;

protected:
// 窗?口?的?初?始?化?
virtual BOOL OnInitDialog()
{
// 必?须?先?调?用?基?类?的?初?始?化?
if (!CMzWndEx::OnInitDialog())
{
return FALSE;
}

// 初?始?化?单?行?编?辑?控?件?,?并?添?加?到?窗?口?中?
m_Edit.SetPos(MZM_MARGIN_MAX,MZM_MARGIN_MAX,GetWidth()-MZM_MARGIN_MAX*2,70);
m_Edit.SetID(MZ_IDC_TESTBTN1); //you must set an unique ID for a edit control
m_Edit.SetTip(L"Please enter text...");    // set the tips text
m_Edit.SetTextColor(RGB(255,0,0)); // you could also set the color of text

AddUiWin(&m_Edit); // don't forget to add the control to the window

// 初?始?化?按?钮?控?件?,?并?添?加?到?窗?口?中?
m_btn.SetButtonType(MZC_BUTTON_PELLUCID);
m_btn.SetPos(100,130,280,100);
m_btn.SetID(MZ_IDC_TESTBTN1);
m_btn.SetText(L"Get Edit's Text");
//m_btn.SetTextColor(RGB(0,255,0));
AddUiWin(&m_btn);

// 初?始?化?文?字?工?具?条?,?并?添?加?到?窗?口?中?
m_Toolbar.SetPos(0,GetHeight()-MZM_HEIGHT_TEXT_TOOLBAR,GetWidth(),MZM_HEIGHT_TEXT_TOOLBAR);
m_Toolbar.SetButton(0, true, true, L"Exit");
m_Toolbar.SetButton(1, true, true, L"Menu");
m_Toolbar.SetButton(2, true, true, L"Hide button");
m_Toolbar.SetID(MZ_IDC_TOOLBAR1);
AddUiWin(&m_Toolbar);

return TRUE;
}




 

二.加命令

 

我们先看来toolbar三个按钮的作用.

1.Exit 推出程序if (nIndex==0)
{
PostQuitMessage(0);
return;
}

2.Menu 创建一个PopupMenu

CPopupMenu 用法

首先通过AddItem方法添加按钮,然后用Create创建Menu,最后用DoModal弹出菜单,通过返回的ID参数判断按钮触发事件if (nIndex==1)
{
// 弹?出?菜?单?
CPopupMenu ppm;
struct PopupMenuItemProp pmip;

pmip.itemCr = MZC_BUTTON_PELLUCID;
pmip.itemRetID = IDC_PPM_CANCEL;
pmip.str = L"Cancel";
ppm.AddItem(pmip);

pmip.itemCr = MZC_BUTTON_ORANGE;
pmip.itemRetID = IDC_PPM_OK;
pmip.str = L"OK";
ppm.AddItem(pmip);

RECT rc = MzGetWorkArea();
rc.top = rc.bottom - ppm.GetHeight();
ppm.Create(rc.left,rc.top,RECT_WIDTH(rc),RECT_HEIGHT(rc),m_hWnd,0,WS_POPUP);
int nID = ppm.DoModal();
if (nID==IDC_PPM_OK)
{
// do what you want...
}
if (nID==IDC_PPM_CANCEL)
{
// do what you want...
}
return;
}

3.Hide button 用于显示和隐藏按钮

注意:UI更新方法(光设置属性是无法更新UI的)

两种方法

(1)局部更新Invalidate

(2)整体更新(更新与控件相关的窗体)Updateif (nIndex==2)
{
m_btn.SetVisible(!m_btn.IsVisible());
m_btn.Invalidate();
m_btn.Update();
if (m_btn.IsVisible())
m_Toolbar.SetButtonText(2, L"Hide button");
else
m_Toolbar.SetButtonText(2, L"Show button");

m_Toolbar.Invalidate();
m_Toolbar.Update();
return;
}

三.MZFC字符串类CMzString

封装了对宽字符的处理,由于用到比较多,基本数据类型的操作需要了解下.来看下获取文本框那个按钮的事件

C_Str方法用于获取字符串指针case MZ_IDC_TESTBTN1:
{
CMzString str(64+m_Edit.GetTextLen());
// 格式化字符串
wsprintf(str.C_Str(), L"You'd input:/n%s", m_Edit.GetText().C_Str());
// 弹出消息框
MzMessageBoxEx(m_hWnd, str.C_Str(), L"", MB_OK, false);
}
break;
这个示例就到这里
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息