修复文件管理对话框崩溃的缺陷
非模态的文件管理对话框在关闭时需要析构,但是这导致2次打开后再关闭时崩溃,该缺陷已修复。
This commit is contained in:
@@ -18,12 +18,16 @@
|
||||
#include "RegisterDlg.h"
|
||||
#include "ServicesDlg.h"
|
||||
#include "VideoDlg.h"
|
||||
#include <vector>
|
||||
|
||||
#ifdef _DEBUG
|
||||
#define new DEBUG_NEW
|
||||
#endif
|
||||
|
||||
#define UM_ICONNOTIFY WM_USER+100
|
||||
|
||||
std::vector<CFileManagerDlg *> v_FileDlg;
|
||||
|
||||
enum
|
||||
{
|
||||
ONLINELIST_IP=0, //IP<49><50><EFBFBD><EFBFBD>˳<EFBFBD><CBB3>
|
||||
@@ -121,6 +125,23 @@ CMy2015RemoteDlg::CMy2015RemoteDlg(CWnd* pParent /*=NULL*/)
|
||||
InitializeCriticalSection(&m_cs);
|
||||
}
|
||||
|
||||
|
||||
CMy2015RemoteDlg::~CMy2015RemoteDlg()
|
||||
{
|
||||
EnterCriticalSection(&m_cs);
|
||||
for (std::vector<CFileManagerDlg *>::iterator iter = v_FileDlg.begin();
|
||||
iter != v_FileDlg.end(); ++iter)
|
||||
{
|
||||
CFileManagerDlg *cur = *iter;
|
||||
::SendMessage(cur->GetSafeHwnd(), WM_CLOSE, 0, 0);
|
||||
while (false == cur->m_bIsClosed)
|
||||
Sleep(1);
|
||||
delete cur;
|
||||
}
|
||||
LeaveCriticalSection(&m_cs);
|
||||
DeleteCriticalSection(&m_cs);
|
||||
}
|
||||
|
||||
void CMy2015RemoteDlg::DoDataExchange(CDataExchange* pDX)
|
||||
{
|
||||
CDialogEx::DoDataExchange(pDX);
|
||||
@@ -235,7 +256,7 @@ VOID CMy2015RemoteDlg::CreateNotifyBar()
|
||||
m_Nid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>е<EFBFBD>״̬
|
||||
m_Nid.uCallbackMessage = UM_ICONNOTIFY; //<2F>ص<EFBFBD><D8B5><EFBFBD>Ϣ
|
||||
m_Nid.hIcon = m_hIcon; //icon <20><><EFBFBD><EFBFBD>
|
||||
CString strTips ="2015RemoteԶ<EFBFBD><EFBFBD>Э<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>........."; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
|
||||
CString strTips ="<EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Զ<EFBFBD><EFBFBD>Э<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
|
||||
lstrcpyn(m_Nid.szTip, (LPCSTR)strTips, sizeof(m_Nid.szTip) / sizeof(m_Nid.szTip[0]));
|
||||
Shell_NotifyIcon(NIM_ADD, &m_Nid); //<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
|
||||
}
|
||||
@@ -304,7 +325,7 @@ VOID CMy2015RemoteDlg::InitControl()
|
||||
|
||||
m_CList_Message.SetExtendedStyle(LVS_EX_FULLROWSELECT);
|
||||
|
||||
SetTimer(0,3000,NULL);
|
||||
SetTimer(0,3000,NULL); // <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5>ļ<EFBFBD><C4BC>Ի<EFBFBD><D4BB><EFBFBD>
|
||||
}
|
||||
|
||||
|
||||
@@ -366,6 +387,7 @@ BOOL CMy2015RemoteDlg::OnInitDialog()
|
||||
CDialogEx::OnInitDialog();
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...<2E><><EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>ϵͳ<CFB5>˵<EFBFBD><CBB5>С<EFBFBD>
|
||||
SetWindowText(_T("Yama"));
|
||||
|
||||
// IDM_ABOUTBOX <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵͳ<CFB5><CDB3><EFBFBD>Χ<EEB7B6>ڡ<EFBFBD>
|
||||
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
|
||||
@@ -543,6 +565,22 @@ void CMy2015RemoteDlg::OnTimer(UINT_PTR nIDEvent)
|
||||
|
||||
void CMy2015RemoteDlg::OnClose()
|
||||
{
|
||||
bool bOpened = false;
|
||||
for (std::vector<CFileManagerDlg *>::iterator iter = v_FileDlg.begin();
|
||||
iter != v_FileDlg.end(); ++iter)
|
||||
{
|
||||
CFileManagerDlg *cur = *iter;
|
||||
if (!cur->m_bIsClosed){
|
||||
bOpened = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (bOpened)
|
||||
{
|
||||
MessageBox(_T("<EFBFBD><EFBFBD><EFBFBD>ȹر<EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!"));
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC>ֵ
|
||||
KillTimer(0);
|
||||
|
||||
@@ -702,9 +740,7 @@ VOID CMy2015RemoteDlg::SendSelectedCommand(PBYTE szBuffer, ULONG ulLength)
|
||||
//<2F><><EFBFBD><EFBFBD>Bar
|
||||
VOID CMy2015RemoteDlg::OnAbout()
|
||||
{
|
||||
MessageBox("1","1");
|
||||
|
||||
m_ToolBar.SetButtonText(0,"Terminal"); //<2F><>λͼ<CEBB><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
||||
MessageBox("Copyleft (c) FTU 2019", "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
||||
}
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD>Menu
|
||||
@@ -1095,6 +1131,21 @@ LRESULT CMy2015RemoteDlg::OnOpenFileManagerDialog(WPARAM wParam, LPARAM lParam)
|
||||
|
||||
ContextObject->v1 = FILEMANAGER_DLG;
|
||||
ContextObject->hDlg = Dlg;
|
||||
EnterCriticalSection(&m_cs);
|
||||
for (std::vector<CFileManagerDlg *>::iterator iter = v_FileDlg.begin();
|
||||
iter != v_FileDlg.end(); )
|
||||
{
|
||||
CFileManagerDlg *cur = *iter;
|
||||
if (cur->m_bIsClosed)
|
||||
{
|
||||
delete cur;
|
||||
iter = v_FileDlg.erase(iter);
|
||||
}else{
|
||||
++iter;
|
||||
}
|
||||
}
|
||||
v_FileDlg.push_back(Dlg);
|
||||
LeaveCriticalSection(&m_cs);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user