#include "stdafx.h"
#include <exdisp.h>
#include <comdef.h>
class CDuiFrameWnd : public CWindowWnd, public INotifyUI {
public:
virtual LPCTSTR GetWindowClassName() const { return _T("CDuiFrameWnd"); }
virtual void Notify(TNotifyUI &msg) {
if (msg.sType == "click") {
if (msg.pSender->GetName() == "myButton") {
::MessageBox(NULL, _T("Hello"), NULL, NULL);
return;
}
}
WindowImplBase::Notify(msg);
}
virtual LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam) {
LRESULT result = 0;
switch (uMsg) {
case WM_CREATE: result = OnCreate(uMsg, wParam, lParam); break;
default:;
}
if (paintManager.MessageHandler(uMsg, wParam, lParam, result)) {
return result;
}
return CWindowWnd::HandleMessage(uMsg, wParam, lParam);
}
LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam) {
CControlUI *button = new CButtonUI();
button->SetText(_T("我是一个按钮"));
button->SetBkColor(0xFFFF0000);
paintManager.Init(m_hWnd);
paintManager.AttachDialog(button);
return 0;
}
protected:
CPaintManagerUI paintManager;
};
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE , LPSTR , int nCmdShow) {
CPaintManagerUI::SetInstance(hInstance);
CPaintManagerUI::SetResourcePath(CPaintManagerUI::GetInstancePath());
CDuiFrameWnd duiFrame;
duiFrame.Create(NULL, _T("DUIWnd"), UI_WNDSTYLE_FRAME, WS_EX_WINDOWEDGE);
duiFrame.ShowModal();
return 0;
}
------------------------------------- 相同的功能使用 WindowImplBase 实现 ---------------------------------
class CDuiFrameWnd : public WindowImplBase {
public:
virtual LPCTSTR GetWindowClassName() const { return _T("DUIMainFrame"); }
virtual CDuiString GetSkinFile() { return _T("duilib.xml"); }
virtual CDuiString GetSkinFolder() { return _T(""); }
virtual void Notify(TNotifyUI &msg) {
if (msg.sType == "click") {
if (msg.pSender->GetName() == "myButton") {
::MessageBox(NULL, _T("Hello"), NULL, NULL);
return;
}
}
WindowImplBase::Notify(msg);
}
};
int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) {
CPaintManagerUI::SetInstance(hInstance);
CDuiFrameWnd duiFrame;
duiFrame.Create(NULL, _T("DUIWnd"), UI_WNDSTYLE_FRAME, WS_EX_WINDOWEDGE);
duiFrame.CenterWindow();
duiFrame.ShowModal();
return 0;
}
CControlUI *button = new CButtonUI();
button->SetText(_T("Button"));
button->SetBkColor(0xFF00FF00);
manager.Init(m_hWnd);
manager.AttachDialog(button);
__super::HandleMessage(uMsg, wParam, lParam);
----------------------------------------------------------------------
virtual void Notify(TNotifyUI &msg) {
if (msg.sType == DUI_MSGTYPE_CLICK && msg.pSender->GetName() == "closeBtn") {
::MessageBox(NULL, _T("click"), NULL, NULL);
}
}
<HorizontalLayout /> <!-- 自动占据剩余空间,/ 前少空格就报错 -->
<Default name="Label" value="bkcolor=" #FF888888 "" />
----------------------------------------------------------------------
static_cast<CListUI*>(manager.FindControl("myList"))
virtual void InitWindow() {
CComboUI *combo = static_cast<CComboUI*>(m_PaintManager.FindControl("combo"));
if (combo) {
for (int i = 0; i < 10; ++i) {
CListLabelElementUI *item = new CListLabelElementUI();
item->SetText("One");
item->SetUserData(CDuiString("你好啊 http://www.qtdebug.com"));
combo->Add(item);
}
}
}
CDuiString senderName = msg.pSender->GetName();
if (msg.sType == DUI_MSGTYPE_CLICK && senderName == "helloButton") {
CComboUI *combo = static_cast<CComboUI*>(m_PaintManager.FindControl("combo"));
combo->NeedUpdate();
CListLabelElementUI *item = static_cast<CListLabelElementUI*>(combo->GetItemAt(combo->GetCurSel()));
CDuiString text;
text.Format("%d - %s", combo->GetCurSel(), item->GetUserData());
::MessageBox(NULL, text, NULL, NULL);
}