-
Notifications
You must be signed in to change notification settings - Fork 1
/
ActivationWatch.cpp
103 lines (90 loc) · 3.6 KB
/
ActivationWatch.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
/****************************************************************************************/
/* ActivationWatch.cpp */
/* */
/* Author: Jim Mischel, Ken Baird */
/* Description: Checks for previous instances */
/* */
/* The contents of this file are subject to the Genesis3D Public License */
/* Version 1.01 (the "License"); you may not use this file except in */
/* compliance with the License. You may obtain a copy of the License at */
/* http://www.genesis3d.com */
/* */
/* Software distributed under the License is distributed on an "AS IS" */
/* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See */
/* the License for the specific language governing rights and limitations */
/* under the License. */
/* */
/* The Original Code is Genesis3D, released March 25, 1999. */
/*Genesis3D Version 1.1 released November 15, 1999 */
/* Copyright (C) 1999 WildTangent, Inc. All Rights Reserved */
/* */
/****************************************************************************************/
#include "stdafx.h"
#include "fusion.h"
#include "ActivationWatch.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CActivationWatch
IMPLEMENT_DYNCREATE(CActivationWatch, CWinThread)
CActivationWatch::CActivationWatch()
{
}
CActivationWatch::~CActivationWatch()
{
}
BOOL CActivationWatch::InitInstance()
{
CFusionApp* pApp = ( CFusionApp* ) AfxGetApp();
CSyncObject* pEvents[ 2 ];
pEvents[ 1 ] = pApp->pNewInstanceEvent;
pEvents[ 0 ] = pApp->pShutdownEvent;
DWORD dwSignalled;
CMultiLock Locker( pEvents, 2 );
for (;;)
{
dwSignalled = Locker.Lock( INFINITE, FALSE );
TRACE( _T( "dwSignalled is %d\n" ), dwSignalled );
// Have we shutdown?
if( ( dwSignalled - WAIT_OBJECT_0 ) == 0 )
break;
// Is this an instance?
if( ( dwSignalled - WAIT_OBJECT_0 ) == 1 )
{
#if 1
CWnd *pWnd = pApp->m_pMainWnd->GetLastActivePopup ();
pWnd->SetForegroundWindow();
pWnd->ShowWindow( SW_RESTORE );
OnIdle( 0 );
#else
CWnd MainWnd;
if( MainWnd.Attach( pApp->m_pMainWnd->m_hWnd ) )
{
CWnd* pWnd = MainWnd.GetLastActivePopup();
pWnd->SetForegroundWindow();
pWnd->ShowWindow( SW_RESTORE );
MainWnd.Detach();
OnIdle( 0 );
}
else
::MessageBeep( 0 );
#endif
}
}
return FALSE;
}
int CActivationWatch::ExitInstance()
{
// TODO: perform any per-thread cleanup here
return CWinThread::ExitInstance();
}
BEGIN_MESSAGE_MAP(CActivationWatch, CWinThread)
//{{AFX_MSG_MAP(CActivationWatch)
// NOTE - the ClassWizard will add and remove mapping macros here.
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CActivationWatch message handlers