duilib 動態建立按鈕
阿新 • • 發佈:2019-01-31
最近準備學習新的介面庫,感覺MFC開發起來太麻煩。找到網上一些開源的介面庫,炫彩,DUILIB,感覺寫都蠻好的,由於炫彩是C就不用了,畢竟自己都是用c++開發,懶得自己進行封裝,我就選擇了duilib這個介面庫,非常感謝大牛留下的好東西。
看了網上的很多資料,發現都是直接用XML寫的介面,但對於我來說有些程式碼必須是動態建立,一直在網上搜索找對應的處理方法。基本上沒有找到。於是,我直接看他怎麼解析XML,你再怎麼樣也只是用程式碼生成對應的物件然後做對應的處理。
XMLclass 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 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,只是自己懶得寫了。沒有技術含量只是記錄一下而已。
網上也有資料來講解各種方法。