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


        接上篇,下面看下来就比较简单了,本示例为牵涉到下面新的控件

    1. UiSingleLineEdit 其实就是TextBox
    2. UiToolbar_Text 一个ToolBar
    3. 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;
      }

    image

    二.加命令

    我们先看来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)整体更新(更新与控件相关的窗体)Update

    if (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;

    这个示例就到这里
  • 相关阅读:
    IA__gdk_drawable_get_size: assertion 'GDK_IS_DRAWABLE (drawable)' failed
    宿主机系统 Deepin 15.4,解决 Virtualbox 5.1 中 XP虚拟机无法使用 USB设备(如:U盘、罗技优联接收器等)的问题
    Deepin安装Virtualbox扩展包出现与gksu-run-helper通信失败的解决
    docker 学习资料收集
    从编程语言的角度看中医的【藏像】理论
    从程序员视角和编程语言角度看【中医】:一种生命健康编程语言
    使用微服务架构思想,设计部署API代理网关和OAuth2.0授权认证框架
    在Office应用中打开WPF窗体并且让子窗体显示在Office应用上
    彻底关闭Excle进程的几个方法
    70后.net老猿,尚能饭否?
  • 原文地址:https://www.cnblogs.com/Clingingboy/p/1603207.html
Copyright © 2020-2023  润新知