Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/**********************************************************************/ /** Microsoft Windows/NT **/ /** Copyright(c) Microsoft Corporation, 1997 - 1999 **/ /**********************************************************************/
/*
MdlsDlg.cpp The class to handle modelss dialog in the snapin
FILE HISTORY:
*/
#include "stdafx.h"
#include "modeless.h"
#include "MdlsDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__; #endif
/////////////////////////////////////////////////////////////////////////////
// CModelessDlg dialog
CModelessDlg::CModelessDlg() : CBaseDialog() { //{{AFX_DATA_INIT(CModelessDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
m_hEventThreadKilled = ::CreateEvent(NULL, FALSE, FALSE, NULL); Assert(m_hEventThreadKilled); }
CModelessDlg::~CModelessDlg() { if (m_hEventThreadKilled) ::CloseHandle(m_hEventThreadKilled); m_hEventThreadKilled = 0; }
void CModelessDlg::DoDataExchange(CDataExchange* pDX) { CBaseDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CModelessDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CModelessDlg, CBaseDialog) //{{AFX_MSG_MAP(CModelessDlg)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CModelessDlg message handlers
void CModelessDlg::OnOK() { DestroyWindow();
// Explicitly kill this thread.
AfxPostQuitMessage(0); }
void CModelessDlg::OnCancel() { DestroyWindow();
// Explicitly kill this thread.
AfxPostQuitMessage(0); }
void CreateModelessDlg(CModelessDlg * pDlg, HWND hWndParent, UINT nIDD) { ModelessThread * pMT;
// If the dialog is still up, don't create a new one
if (pDlg->GetSafeHwnd()) { ::SetActiveWindow(pDlg->GetSafeHwnd()); return; }
pMT = new ModelessThread(hWndParent, nIDD, pDlg->GetSignalEvent(), pDlg); pMT->CreateThread(); }
void WaitForModelessDlgClose(CModelessDlg *pDlg) { if (pDlg->GetSafeHwnd()) { // Post a cancel to that window
// Do an explicit post so that it executes on the other thread
pDlg->PostMessage(WM_COMMAND, IDCANCEL, 0);
// Now we need to wait for the event to be signalled so that
// its memory can be cleaned up
WaitForSingleObject(pDlg->GetSignalEvent(), INFINITE); } }
|