duilib 动态创建按钮

来源:互联网 发布:知乎最好的答案 编辑:程序博客网 时间:2024/06/05 10:41

最近准备学习新的界面库,感觉MFC开发起来太麻烦。找到网上一些开源的界面库,炫彩,DUILIB,感觉写都蛮好的,由于炫彩是C就不用了,毕竟自己都是用c++开发,懒得自己进行封装,我就选择了duilib这个界面库,非常感谢大牛留下的好东西。

看了网上的很多资料,发现都是直接用XML写的界面,但对于我来说有些代码必须是动态创建,一直在网上搜索找对应的处理方法。基本上没有找到。于是,我直接看他怎么解析XML,你再怎么样也只是用代码生成对应的对象然后做对应的处理。

class CDUIMain:public  WindowImplBase{public:virtual LPCTSTR    GetWindowClassName() const   {   return _T("DUIMainFrame");  }virtual CDuiString GetSkinFile()                {   return _T("UISkin1.xml");  }virtual CDuiString GetSkinFolder()              {   return _T("");  }virtual void Notify(TNotifyUI& msg){if(msg.sType == _T("click")){if(msg.pSender->GetName() == _T("BtnUITest")){MessageBox(*this,_T("响应事件"),0,0);CDuiString strInfo;strInfo.Format(_T("%d"),this->m_PaintManager.GetPostPaintCount());MessageBox(this->m_hWnd,strInfo,0,0);}}__super::Notify(msg);}virtual void OnClick(TNotifyUI& msg){if(msg.pSender->GetName() == _T("testmy")){MessageBox(*this,_T("你点击了TestMy"),0,0);}__super::OnClick(msg);}virtual LRESULT OnClose(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled){PostQuitMessage(0);return FALSE;}virtual void InitWindow(){RECT _rec;_rec.left = 200;_rec.right = 250;_rec.top = 60;_rec.bottom = 80;CButtonUI *pBtn = new CButtonUI;//::MessageBox(this->m_hWnd,m_PaintManager.GetRoot()->GetClass(),0,0);//因为第一个控件就是CContainerUI 所以我也没有判断//网上都是用在XML中写按钮,我看了许多例子都没有看到动态创建按钮。//自己研究大半天,之后模仿解析XML生成控件的代码。//有时候真的只有在代码当中才能找到解决方法。CContainerUI* p = static_cast<CContainerUI*> (m_PaintManager.GetRoot());pBtn->SetFloat();pBtn->SetName(_T("testmy"));pBtn->SetText(_T("我就是我自己11111"));pBtn->SetToolTip(_T("我是一个按钮"));pBtn->SetBkColor(0xff808000);SIZE leftTop = {200,60};pBtn->SetFixedXY(leftTop);pBtn->SetFixedWidth(100);pBtn->SetFixedHeight(50);p->Add(pBtn);}};int APIENTRY _tWinMain(HINSTANCE hInstance,                     HINSTANCE hPrevInstance,                     LPTSTR    lpCmdLine,                     int       nCmdShow){UNREFERENCED_PARAMETER(hPrevInstance);UNREFERENCED_PARAMETER(lpCmdLine);CPaintManagerUI::SetInstance(hInstance);CDUIMain duiFrame;duiFrame.Create(NULL, _T("DUIWnd"), UI_WNDSTYLE_FRAME, WS_EX_WINDOWEDGE);duiFrame.CenterWindow();duiFrame.ShowModal();/*CFrameWindowWnd* pWnd = new CFrameWindowWnd;pWnd->Create(NULL,_T(""),UI_WNDSTYLE_FRAME,NULL);pWnd->ShowWindow();*/CPaintManagerUI::MessageLoop();}


XML

<?xml version="1.0" encoding="utf-8" standalone="yes" ?><Window sizebox="4,4,4,4" caption="0,0,0,20">    <Container width="268" height="283" bkcolor="#FF0000FF">        <Button name="BtnUITest" text="我的一个东西" float="true" pos="228,30,0,0" width="124" height="30" bkcolor="#FF008080" textcolor="#FF000000" disabledtextcolor="#FFA7A6AA" align="center" />    </Container></Window>

其实这里完全都可以不用XML,只是自己懒得写了。没有技术含量只是记录一下而已。

网上也有资料来讲解各种方法。

1 0
原创粉丝点击