dll中建立非模式對話方塊的問題

2021-05-23 00:33:48 字數 606 閱讀 9955

今天在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關閉對話方塊,也...