duilib對MFC的支援

2021-06-07 13:37:15 字數 2895 閱讀 1257

關注duilib很久了,前段時間剛好有個mfc專案,對ui要求比較高,苦於duilib是基於win32開發的,而我對win32只有皮毛的了解,只好試著看源**,發現裡面有mfc的乙個demo,但是編譯通不過,無奈只好試著看作者的思路,經過幾天的摸索,終於成功運用到mfc專案中。先上效果圖,再解釋:

上**:

1.編寫duilib的cwindowwnd類

class cjcsipframewnd : public cwindowwnd, public inotifyui, public isipcallback

;lpctstr getwindowclassname() const ;

uint getclassstyle() const ;

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_pb***el;

cbuttonui* m_pbtnclear;

cbuttonui* m_pb***ial;

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*/) ;

2.準備好mfc專案了,在主對話方塊的oninitdialog()中新增下面**(注意將主對話方塊的資源檔案樣式設定成none,並刪除所有控制項):

movewindow(0, 0, 500, 260);

::setwindowlongptr(this->getsafehwnd(), gwlp_userdata, reinterpret_cast(&m_mainwnd));

m_mainwnd.subclass(this->getsafehwnd());

m_mainwnd.loadskin();

這樣就將duilib的介面嵌入到mfc對話方塊中了,如果要在duilib中和mfc類中通訊,可以將mfc類的指標傳過去。

duilib中使用MFC控制項

這裡示例將mfc按鈕放到duilib滑塊條控制項的位置 1 準備好乙個duilib控制項來容納mfc控制項,如下 將帶控制代碼hwnd的控制項顯示到ccontrolui上面 class cwndui public ccontrolui virtual void setinternvisible bo...

Rose對MFC的往返工程支援介紹

提供 uml作圖輔助的工具達到了數以百計之多,但是就我所知,能夠提供對 vc 和mfc 開發的應用程式的往返工程的工具只有 rational 公司的rose rose 提供了對 visual c 的往返工程功能,即可以從模型生成 vc 的 也可以從 vc 直接分析出模型。由於 rose 直接從vc ...

MFC中忘記了開啟對ActiveX的支援怎麼辦?

很久沒有寫過一些疑難雜症型別的部落格了,最近玩玩舊 過程中發現準備給自己以前的乙個mfc內嵌ie,結果怎麼都跳不出來,不停報錯 也就是下面建工程的時候忘記勾選了 後面只要是我在窗體裡嵌入乙個ie瀏覽器,立馬就報錯彈出來。但是工程已經建好了,去勾選呢,可以在mfc主的cpp檔案中加入,也就是在 afx...