1. 在建立和呼叫對話方塊之前一定要使用afx_manage_state(afxgetstaticmodulestate()),這是因為mfc建立的project型別肯定只能是dll,需要告訴在執行時去dll所在的模組下找資源檔案而不是去應用程式(也就是ug)中找。這一點適用於所有ug呼叫的mfc專案;
2. 建立對話方塊的**如下
hwnd ughwnd = (hwnd) uf_ui_get_default_parent();
cwnd *ugwindow = cwnd::fromhandle(ughwnd);
cmfcdialog *pmfcdlg=null;
pmfcdlg= new pmfcdlg(ugwindow);
pmfcdlg->create(idd_dialog, ugwindow);
//可以在此處新增setwindowpos設定對話方塊出現的位置
psimdlg->showwindow(sw_normal);
建立時一定要使用指標,這點在很多文章和帖子上已經反覆強調過。這裡想強調的一點是最好得到ug自身的視窗(控制代碼或者cwnd),將其作為父視窗傳給對話方塊,很有好處和必要;
3. 第三點是我發帖子剛剛在論壇上求問過的,就是非模態對話方塊和ug本身互動對話方塊的衝突,原來是要用uf_ui_lock_ug_access( uf_ui_from_custom )和uf_ui_unlock_ug_access( uf_ui_from_custom )把ug對話方塊的函式包起來,具體原因可參見ug幫助文件(雖然從來沒什麼太大幫助)。eg:
showwindow(sw_hide);//optional, 隱藏父視窗
uf_ui_lock_ug_access( uf_ui_from_custom ); uf_ui_select_by_class(message,&opts,&response,&count,&selecteditem );
uf_ui_unlock_ug_access( uf_ui_from_custom );
showwindow(sw_show);//optional,再次顯示父視窗
ps:對於隱藏和顯示父視窗,對於模態對話方塊來說要稍微複雜一點,此處不贅言。
4. 也是其他文章經常講到的,為對話方塊新增ondestroy函式,在其中刪除掉this指標,銷毀對話方塊物件;
5. 如果對話方塊有ok, cancel或exit等出口按鈕,一定要過載相應的響應函式,去掉onok之類的出口函式,用sendmessage(wm_destroy)來代替。之所以這麼做的原因,是非模態對話方塊在被呼叫者的程式範圍內無法得知其何時結束(不同於模態對話方塊的domodal),因此只能由ondestroy函式內完成銷毀動作。當然還有其它的解決辦法,此處推薦這種。
6. last but not the least,非常不引人注意而又非常致命的一點,在ufusr_ask_unload函式中要使用uf_unload_sel_dialog而非uf_unload_immediately作為返回值,否則ug載入對話方塊時將出錯!!!
大概想到的就這麼多,希望能對大家有所幫助。
//hustoysj個人見解
如果以上方法還是不行,試試在工程屬性裡把mfc的呼叫是由共享改為靜態試試。
個人認為mfc介面雖然功能強大方便,但畢竟ug有自己的一套的介面系統,所以從相容性的角度考慮,還是用ug自己的介面比較好,而且新的block介面已經做的很美觀、實用,相容性很好。mfc的介面在ug上呼叫難免會存在各種各樣的問題,雖然絕大多數都可以解決,但影響程式設計效率。
非模態對話方塊 MFC
cvolsetdlg m pvoldlg null m pvoldlg newcvolsetdlg m pvoldlg create idd dlg vol m pvoldlg showwindow sw show 過載oncancel函式 void cxx oncancel todo add yo...
MFC 非模態對話方塊
非模態對話方塊 用mfc可以建立非模態的對話方塊,只是建立方式不同,模態對話方塊用 dlg.domodel 呼叫,而非模態對話方塊要用create函式建立呼叫。假設idd test dlg為已經定義的對話方塊資源的id號 ctestdlg dlg new ctestdlg dlg create id...
MFC中模態對話方塊和非模態對話方塊的差別
在mfc中有模態對話方塊和非模態對話方塊,那這兩種有什麼差別呢。又都是用於什麼場合呢。首先,要弄清楚2種對話方塊是怎樣建立的。然後要弄清楚2種對話方塊有什麼差別,可能從表面上看,模態會堵塞主對話方塊。可原理是什麼呢。還有就是。當有模態和非模態對話方塊沒有關閉的時候,在工作列中。關閉主視窗,會有什麼樣...