關注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...