duilib程序运行流程(1)

来源:互联网 发布:互盾数据恢复注册机 编辑:程序博客网 时间:2024/05/17 23:21

     本人最近在学习duilibUI开发,就目前还是对duilib开发属于门外汉类型,不过就这几天的学习想做过小小的总结-----关于duilib程序运行的主要流程是怎么样的。

主函数(借鉴 Alberl所写的duilib教学入门)

class CDuiFrameWnd : public WindowImplBase
{
public:
    virtual LPCTSTR    GetWindowClassName() const   {   return _T("DUIMainFram");  }
    virtual CDuiString GetSkinFile()                {   return _T("duilib.xml");  }
    virtual CDuiString GetSkinFolder()              {   return _T("");  }
};

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;
}

1,CPaintManagerUI::SetInstance(hInstance);

首先通过CPaintManagerUI类的SetInstance()函数保存应用程序的实例句柄hInstance于CPaintManagerUI这个类的成员变量m_hInstance

2,duiFrame.Create(NULL, _T("DUIWnd"), UI_WNDSTYLE_FRAME, WS_EX_WINDOWEDGE);

用来创建一个窗体,这个函数其实是调用CWindowWnd类的Create函数,其实这个函数相当于win32应用程序的窗口创建

内部函数:

if( GetSuperClassName() != NULL && !RegisterSuperclass() ) return NULL;
    if( GetSuperClassName() == NULL && !RegisterWindowClass() ) return NULL;
    m_hWnd = ::CreateWindowEx(dwExStyle, GetWindowClassName(), pstrName, dwStyle, x, y, cx, cy, hwndParent, hMenu, CPaintManagerUI::GetInstance(), this);
    ASSERT(m_hWnd!=NULL);
    return m_hWnd;

3.duiFrame.ShowModal();将窗体显示

哪他是怎么将xml加载进来呢???

其关键就是CreateWindowEx()这个函数参数会发送一个WM_CREATE消息,而duilib一大功能就是拦截这个消息,然后调用WindowImplBase::OnCreate()函数,而这个函数就是用来加载xml的,通过virtual CDuiString GetSkinFile()  {   return _T("duilib.xml");  }和virtual CDuiString GetSkinFolder(){   return _T("");  }这两个函数获取xml路径,调用

CDialogBuilder类的Create函数去加载


0 0
原创粉丝点击