duilib对MFC的支持

来源:互联网 发布:淘宝上的轮毂不能买 编辑:程序博客网 时间:2024/04/29 16:59

关注duilib很久了,前段时间刚好有个MFC项目,对UI要求比较高,苦于duilib是基于win32开发的,而我对win32只有皮毛的了解,只好试着看源代码,发现里面有MFC的一个Demo,但是编译通不过,无奈只好试着看作者的思路,经过几天的摸索,终于成功运用到MFC项目中。先上效果图,再解释:


上代码:

1.编写duilib的CWindowWnd类

class CJCSipFrameWnd : public CWindowWnd, public INotifyUI, public ISipCallback
{
public:
CJCSipFrameWnd() { };
LPCTSTR GetWindowClassName() const { return _T("JCSipFrameWnd"); };
UINT GetClassStyle() const { return CS_DBLCLKS; };

void Init();
bool CheckXml();
void OnPrepare();
void Notify(TNotifyUI& msg);
void LoadSkin();
void InputNumber(CControlUI* pSender);
void SetBalance();

LRESULT OnClose(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnNcActivate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnNcCalcSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnNcPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnNcHitTest(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnGetMinMaxInfo(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnSysCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam);

public:
CPaintManagerUI m_pm;


private:
CLabelUI* m_titleLabel;
CLabelUI* m_callStatusLabel;
CLabelUI* m_accountLabel;
CLabelUI* m_balanceLabel;


CButtonUI* m_pCloseBtn;
CButtonUI* m_pMinBtn;


CButtonUI* m_pUpdateBtn;
//...
CButtonUI* m_pBtn1;
CButtonUI* m_pBtn2;
CButtonUI* m_pBtn3;
CButtonUI* m_pBtn4;
CButtonUI* m_pBtn5;
CButtonUI* m_pBtn6;
CButtonUI* m_pBtn7;
CButtonUI* m_pBtn8;
CButtonUI* m_pBtn9;
CButtonUI* m_pBtnStar;
CButtonUI* m_pBtn0;
CButtonUI* m_pBtnPound;
CButtonUI* m_pBtnDel;
CButtonUI* m_pBtnClear;
CButtonUI* m_pBtnDial;
CButtonUI* m_pBtnHangup;
CButtonUI* m_pBtnGetBalance;


CEditUI* m_pEditNumber;
};


// 注意这里与一般duilib不同的是不用编写OnCreate函数和OnFinalMessage函数

// LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);

// void OnFinalMessage(HWND /*hWnd*/) { delete this; };

2.准备好MFC项目了,在主对话框的OnInitDialog()中添加下面代码(注意将主对话框的资源文件样式设置成NONE,并删除所有控件):

MoveWindow(0, 0, 500, 260);
::SetWindowLongPtr(this->GetSafeHwnd(), GWLP_USERDATA, reinterpret_cast<LPARAM>(&m_mainWnd));
m_mainWnd.Subclass(this->GetSafeHwnd());
m_mainWnd.LoadSkin();

这样就将duilib的界面嵌入到MFC对话框中了,如果要在duilib中和MFC类中通信,可以将MFC类的指针传过去。

0 0
原创粉丝点击