今天在dll的輸出函式中用非模態對話方塊遇到乙個錯誤,file : dlgcore.cpp,line : 173。經過追蹤除錯,發現在非模態對話的建立過程中,在查詢資源的時候出了問題。
hinstance hinst = afxfindresourcehandle(lpszresource, rt_dialog);
hrsrc hresource = ::findresource(hinst, lpszresource, rt_dialog);
查到的資源控制代碼hresource為空,即沒有查到這個資源。
在函式afxfindresourcehandle的呼叫過程中有這樣一段
// first check the main module state
afx_module_state* pmodulestate = afxgetmodulestate();
if (!pmodulestate->m_bsystem)
函式afxgetmodulestate是取得當前模組的狀態。哦,原來在輸出函式的開頭忘記更改當前模組狀態為dll了,於是在函式開頭加了個
afx_manage_state(afxgetstaticmodulestate());
就好了。
dll中建立非模式對話方塊的問題
今天在dll的輸出函式中用非模態對話方塊遇到乙個錯誤,file dlgcore.cpp,line 173。經過追蹤除錯,發現在非模態對話的建立過程中,在查詢資源的時候出了問題。hinstance hinst afxfindresourcehandle lpszresource,rt dialog h...
非模式對話方塊的問題
詳細請參考這個大神的部落格 對於非模態視窗,必須過載oncancel函式,在函式中呼叫destroywindows 方法,且不能呼叫基類的函式。因為基類函式中呼叫的是 enddialog 方法。因為enddialog是關閉模態對話方塊時呼叫的 而onclose 也會呼叫oncancel 方法。另外想...
非模式對話方塊的問題
對於非模態視窗,必須過載oncancel函式,在函式中呼叫destroywindows 方法,且不能呼叫基類的函式。因為基類函式中呼叫的是 enddialog 方法。因為enddialog是關閉模態對話方塊時呼叫的 而onclose 也會呼叫oncancel 方法。另外想通過onok關閉對話方塊,也...