彻底修复多次打开文件管理窗口崩溃的缺陷
1、在主对话框清理子窗口的资源(原先在各自的OnClose函数),通过CLOSE_DELETE_DLG控制。 2、修正CFileManagerDlg的构造函数调用SHGetFileInfo和FromHandle方法,解决多次打开崩溃。 3、更新服务端zlib版本为V1.2.11。(与客户端不同,因inflate_fast 崩溃,没有采用汇编)
This commit is contained in:
@@ -43,10 +43,9 @@ CFileManagerDlg::CFileManagerDlg(CWnd* pParent, CIOCPServer* pIOCPServer, Client
|
||||
sizeof(SHFILEINFO),
|
||||
SHGFI_ICON | SHGFI_USEFILEATTRIBUTES
|
||||
);
|
||||
m_hIcon = sfi.hIcon;
|
||||
HIMAGELIST hImageList;
|
||||
m_hIcon = sfi.hIcon;
|
||||
// <20><><EFBFBD><EFBFBD>ϵͳͼ<CDB3><CDBC><EFBFBD>б<EFBFBD>
|
||||
hImageList = (HIMAGELIST)SHGetFileInfo
|
||||
static HIMAGELIST hImageList_Large = (HIMAGELIST)SHGetFileInfo
|
||||
(
|
||||
NULL,
|
||||
0,
|
||||
@@ -54,10 +53,11 @@ CFileManagerDlg::CFileManagerDlg(CWnd* pParent, CIOCPServer* pIOCPServer, Client
|
||||
sizeof(SHFILEINFO),
|
||||
SHGFI_LARGEICON | SHGFI_SYSICONINDEX
|
||||
);
|
||||
m_pImageList_Large = CImageList::FromHandle(hImageList);
|
||||
static CImageList *pLarge = CImageList::FromHandle(hImageList_Large);
|
||||
m_pImageList_Large = pLarge;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>ϵͳͼ<CDB3><CDBC><EFBFBD>б<EFBFBD>
|
||||
hImageList = (HIMAGELIST)SHGetFileInfo
|
||||
static HIMAGELIST hImageList_Small = (HIMAGELIST)SHGetFileInfo
|
||||
(
|
||||
NULL,
|
||||
0,
|
||||
@@ -65,7 +65,8 @@ CFileManagerDlg::CFileManagerDlg(CWnd* pParent, CIOCPServer* pIOCPServer, Client
|
||||
sizeof(SHFILEINFO),
|
||||
SHGFI_SMALLICON | SHGFI_SYSICONINDEX
|
||||
);
|
||||
m_pImageList_Small = CImageList::FromHandle(hImageList);
|
||||
static CImageList *pSmall = CImageList::FromHandle(hImageList_Small);
|
||||
m_pImageList_Small = pSmall;
|
||||
|
||||
// <20><>ʼ<EFBFBD><CABC>Ӧ<EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD>СΪ0
|
||||
|
||||
@@ -878,12 +879,18 @@ void CFileManagerDlg::OnClose()
|
||||
{
|
||||
// TODO: Add your message handler code here and/or call default
|
||||
CoUninitialize();
|
||||
m_pContext->m_Dialog = 0;
|
||||
|
||||
#if CLOSE_DELETE_DLG
|
||||
m_pContext->v1 = 0;
|
||||
#endif
|
||||
|
||||
closesocket(m_pContext->m_Socket);
|
||||
|
||||
CDialog::OnClose();
|
||||
m_bIsClosed = true;
|
||||
#if CLOSE_DELETE_DLG
|
||||
//delete this; //<2F>˴<EFBFBD><CBB4>ͷ<EFBFBD><CDB7>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>ڵ<EFBFBD>2<EFBFBD>α<EFBFBD><CEB1><EFBFBD>
|
||||
#endif
|
||||
}
|
||||
|
||||
CString CFileManagerDlg::GetParentDirectory(CString strPath)
|
||||
|
||||
Reference in New Issue
Block a user