// ==========================================================================
// Class Implementation: COXCustomizeInstanceManagerPage
// ==========================================================================
// Version: 9.3
// This software along with its related components, documentation and files ("The Libraries")
// is � 1994-2007 The Code Project (1612916 Ontario Limited) and use of The Libraries is
// governed by a software license agreement ("Agreement"). Copies of the Agreement are
// available at The Code Project (www.codeproject.com), as part of the package you downloaded
// to obtain this file, or directly from our office. For a copy of the license governing
// this software, you may contact us at legalaffairs@codeproject.com, or by calling 416-849-8900.
// //////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "OXCustomizeInstanceManagerPage.h"
#include "UTB64Bit.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
const UINT IDT_OXCUSTOMIZEINSTANCEMANAGER_CHECK_INTANCES=278;
const UINT ID_OXCUSTOMIZEINSTANCEMANAGER_CHECK_INTANCES_DELAY=1000;
/////////////////////////////////////////////////////////////////////////////
// COXCustomizeInstanceManagerPage dialog
IMPLEMENT_DYNCREATE(COXCustomizeInstanceManagerPage, COXCustomizePage)
COXCustomizeInstanceManagerPage::COXCustomizeInstanceManagerPage() :
m_instanceManager(GetCurrentInstanceName())
{
//{{AFX_DATA_INIT(COXCustomizeInstanceManagerPage)
m_nInstanceLimitType = 0;
m_nMaxAllowedInstanceNumber = 2;
//}}AFX_DATA_INIT
m_nDialogID=IDD;
m_sProfileName.Empty();
m_nTimerCheckInstancesID=0;
}
COXCustomizeInstanceManagerPage::~COXCustomizeInstanceManagerPage()
{
}
BOOL COXCustomizeInstanceManagerPage::
InitializeInstanceManager(int nMaxAllowedInstances/*=OX_MAX_NUM_INSTANCES_IN_LIST*/,
LPCTSTR lpszProfileName/*=_T("CustomizeInstanceManager")*/)
{
ASSERT(nMaxAllowedInstances>0 &&
nMaxAllowedInstances<=OX_MAX_NUM_INSTANCES_IN_LIST);
if(nMaxAllowedInstances<1 ||
nMaxAllowedInstances>OX_MAX_NUM_INSTANCES_IN_LIST)
{
TRACE(_T("COXCustomizeInstanceManagerPage::InitializeInstanceManager: the maximum allowed number of instances=%d is out of range: %d...%d\n"),nMaxAllowedInstances,1,OX_MAX_NUM_INSTANCES_IN_LIST);
return FALSE;
}
m_nMaxAllowedInstanceNumber=nMaxAllowedInstances;
CWinApp* pApp=AfxGetApp();
ASSERT(pApp!=NULL);
if(lpszProfileName!=NULL)
{
m_sProfileName=lpszProfileName;
m_nMaxAllowedInstanceNumber=pApp->GetProfileInt(m_sProfileName,
_T("MaxAllowedInstanceNumber"),m_nMaxAllowedInstanceNumber);
}
ASSERT(m_nMaxAllowedInstanceNumber>0 &&
m_nMaxAllowedInstanceNumber<=OX_MAX_NUM_INSTANCES_IN_LIST);
m_instanceManager.SetMaxAllowedInstances(m_nMaxAllowedInstanceNumber);
m_nInstanceLimitType=
(m_nMaxAllowedInstanceNumber==OX_MAX_NUM_INSTANCES_IN_LIST ? 0 :
(m_nMaxAllowedInstanceNumber==1 ? 1 : 2));
return TRUE;
}
BOOL COXCustomizeInstanceManagerPage::OnCloseManager(BOOL bIsOk)
{
CWinApp* pApp=AfxGetApp();
ASSERT(pApp!=NULL);
if(bIsOk)
{
if(!ApplyChanges())
return FALSE;
if(!m_sProfileName.IsEmpty())
{
pApp->WriteProfileInt(m_sProfileName,
_T("MaxAllowedInstanceNumber"),m_nMaxAllowedInstanceNumber);
}
}
else
{
if(!m_sProfileName.IsEmpty())
{
m_nMaxAllowedInstanceNumber=pApp->GetProfileInt(m_sProfileName,
_T("MaxAllowedInstanceNumber"),m_nMaxAllowedInstanceNumber);
m_instanceManager.SetMaxAllowedInstances(m_nMaxAllowedInstanceNumber);
}
}
return TRUE;
}
void COXCustomizeInstanceManagerPage::DoDataExchange(CDataExchange* pDX)
{
COXCustomizePage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(COXCustomizeInstanceManagerPage)
DDX_Control(pDX, IDC_OX_SPIN_LIMIT_NUMBER, m_spinMaxAllowedInstances);
DDX_Control(pDX, IDC_OX_LIST_INSTANCES, m_listInstances);
DDX_Control(pDX, IDC_OX_STATIC_INSTANCE_COUNT, m_staticInstanceCount);
DDX_Control(pDX, IDC_OX_SEPARATOR_OPTIONS, m_sepOptions);
DDX_Control(pDX, IDC_OX_SEPARATOR_OPERATIONS, m_sepOperations);
DDX_Control(pDX, IDC_OX_SEPARATOR_INSTANCES, m_sepInstances);
DDX_Radio(pDX, IDC_OX_RADIO_MAXNUMBER_INSTANCE_NOLIMIT, m_nInstanceLimitType);
DDX_Text(pDX, IDC_OX_EDIT_LIMIT_NUMBER, m_nMaxAllowedInstanceNumber);
DDV_MinMaxUInt(pDX, m_nMaxAllowedInstanceNumber, 1, OX_MAX_NUM_INSTANCES_IN_LIST);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(COXCustomizeInstanceManagerPage, COXCustomizePage)
//{{AFX_MSG_MAP(COXCustomizeInstanceManagerPage)
ON_BN_CLICKED(IDC_OX_RADIO_MAXNUMBER_INSTANCE_LIMITTO, OnRadioMaxnumberInstanceLimitto)
ON_BN_CLICKED(IDC_OX_RADIO_MAXNUMBER_INSTANCE_NOLIMIT, OnRadioMaxnumberInstanceNolimit)
ON_BN_CLICKED(IDC_OX_RADIO_MAXNUMBER_INSTANCE_ONLYONE, OnRadioMaxnumberInstanceOnlyone)
ON_EN_CHANGE(IDC_OX_EDIT_LIMIT_NUMBER, OnChangeEditLimitNumber)
ON_NOTIFY(LVN_ITEMCHANGED, IDC_OX_LIST_INSTANCES, OnItemchangedListInstances)
ON_WM_TIMER()
ON_WM_DESTROY()
ON_BN_CLICKED(IDC_OX_BUTTON_BRING_TO_FRONT, OnButtonBringToFront)
ON_BN_CLICKED(IDC_OX_BUTTON_CLOSE, OnButtonClose)
ON_BN_CLICKED(IDC_OX_BUTTON_MAXIMIZE, OnButtonMaximize)
ON_BN_CLICKED(IDC_OX_BUTTON_MINIMIZE, OnButtonMinimize)
ON_BN_CLICKED(IDC_OX_BUTTON_RESTORE, OnButtonRestore)
ON_BN_CLICKED(IDC_OX_BUTTON_SWITCH_TO, OnButtonSwitchTo)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
CString COXCustomizeInstanceManagerPage::GetCurrentInstanceName()
{
CString sFileName(_T(""));
::GetModuleFileName(NULL,sFileName.GetBuffer(MAX_PATH),MAX_PATH);
sFileName.ReleaseBuffer();
#if _MFC_VER>0x0421
sFileName.Remove(_T('\\'));
#else
int nPos=sFileName.Find(_T('\\'));
while(nPos!=-1)
{
sFileName=sFileName.Left(nPos)+sFileName.Mid(nPos+1);
nPos=sFileName.Find(_T('\\'));
}
#endif // _MFC_VER>0x0421
return sFileName;
}
/////////////////////////////////////////////////////////////////////////////
// COXCustomizeInstanceManagerPage message handlers
BOOL COXCustomizeInstanceManagerPage::Load(const COXCustomizeManager* pCustomizeManager)
{
// Call default implementation. It will load this demo dialog as the first
// page and will create About and CodeSample pages if specified.
if(!COXCustomizePage::Load(pCustomizeManager))
return FALSE;
return TRUE;
}
void COXCustomizeInstanceManagerPage::Unload()
{
// add here code for cleaning up all objects created by demo
//
//
//////////////////////////////////////////////////////////////////////////
COXCustomizePage::Unload();
}
void COXCustomizeInstanceManagerPage::OnInitDialog()
{
// must call default implementation
COXCustomizePage::OnInitDialog();
// add here initialization code for your demo dialog. Treat it as a
// normal COXCustomizePage::OnInitDialog function
m_nTimerCheckInstancesID=SetTimer(IDT_OXCUSTOMIZEINSTANCEMANAGER_CHECK_INTANCES,
ID_OXCUSTOMIZEINSTANCEMANAGER_CHECK_INTANCES_DELAY,NULL);
ASSERT(m_nTimerCheckInstancesID!=0);
m_spinMaxAllowedInstances.SetRange(1,OX_MAX_NUM_INSTANCES_IN_LIST);
CString sItem;
VERIFY(sItem.LoadString(IDS_OX_CSTMZEINSTANCEINSTANCE));
m_listInstances.InsertColumn(0,sItem,LVCFMT_LEFT,100);//"Instance"
VERIFY(sItem.LoadString(IDS_OX_CSTMZEINSTANCEPID));
m_listInstances.InsertColumn(1,sItem,LVCFMT_CENTER,40);//"PID"
VERIFY(sItem.LoadString(IDS_OX_CSTMZEINSTANCESTATUS));
m_listInstances.InsertColumn(2,sItem,LVCFMT_CENTER,50);//"Status"
PopulateInstancesList();
m_staticInstanceCount.SetTextColor(RGB(0,0,128));
CFont font;
VERIFY(font.CreatePointFont(140,_T("Times New Roman")));
m_staticInstanceCount.SetTextFont(&font);
// layout
//
m_LayoutManager.TieChild(&m_sepOptions,OX_LMS_LEFT|OX_LMS_RIGHT,OX_LMT_SAME);
m_LayoutManager.TieChild(&m_sepInstances,OX_LMS_LEFT|OX_LMS_RIGHT,OX_LMT_SAME);
m_LayoutManager.TieChild(&m_listInstances,OX_LMS_ANY,OX_LMT_SAME);
m_LayoutManager.TieChild(&m_sepOperations,OX_LMS_RIGHT,OX_LMT_SAME);
m_LayoutManager.TieChild(IDC_OX_BUTTON_CLOSE,OX_LMS_RIGHT,OX_LMT_SAME);
m_LayoutManager.TieChild(IDC_OX_BUTTON_SWITCH_TO,OX_LMS_RIGHT,OX_LMT_SAME);
m_LayoutManager.TieChild(IDC_OX_BUTTON_BRING_TO_FRONT,OX_LMS_RIGHT,OX_LMT_SAME);
m_LayoutManager.TieChild(IDC_OX_BUTTON_MAXIMIZE,OX_LMS_RIGHT,OX_LMT_SAME);
m_LayoutManager.TieChild(IDC_OX_BUTTON_MINIMIZE,OX_LMS_RIGHT,OX_LMT_SAME);
m_LayoutManager.TieChild(IDC_OX_BUTTON_RESTORE,OX_LMS_RIGHT,OX_LMT_SAME);
//
///////////////////////////////////////
m_bInitialized=TRUE;
UpdateData(FALSE);
ShowVars();
}
BOOL COXCustomizeInstanceManagerPage::ApplyChanges()
{
if(!UpdateData(TRUE))
return FALSE;
switch(m_nInstanceLimitType)
{
case 0:
m_nMaxAllowedInstanceNumber=OX_MAX_NUM_INSTANCES_IN_LIST;
break;
case 1:
m_nMaxAllowedInstanceNumber=1;
break;
}
m_instanceManager.SetMaxAllowedInstances(m_nMaxAllowedInstanceNumber);
return TRUE;
}
void COXCustomizeInstanceManagerPage::OnRadioMaxnumberInstanceLimitto()
{
// TODO: Add your control notification handler code here
ShowVars();
}
void COXCustomizeInstanceManagerPage::OnRadioMaxnumberInstanceNolimit()
{
// TODO: Add your control notification handler code here
ShowVars();
}
void COXCustomizeInstanceManagerPage::OnRadioMaxnumberInstanceOnlyone()
{
// TODO: Add your control notification handler code here
ShowVars();
}
void COXCustomizeInstanceManagerPage::PopulateInstancesList()
{
int nInstanceRunningCount=m_instanceManager.GetNumberOfInstances();
CString sInstanceRunningCount;
sInstanceRunningCount.Format(_T("%d"),nInstanceRunningCount);
m_staticInstanceCount.SetWindowText(sInstanceRunningCount);
int nSelectedItem=-1;
#if _MFC_VER > 0x0421
POSITION pos=m_listInstances.GetFirstSelectedItemPosition();
#else
ASSERT(::IsWindow(m_listInstances.m_hWnd));
POSITION pos = (POSITION) (1+m_listInstances.GetNextItem(-1, LVIS_SELECTED));
#endif
if(pos!=NULL)
{
#if _MFC_VER > 0x0421
int nSelectedItem=m_listInstances.GetNextSelectedItem(pos);
#else
ASSERT(::IsWindow(m_listInstances.m_hWnd));
int nSelectedItem = (int)pos-1;
POSITION npos = (POSITION) (1+m_listInstances.GetNextItem(nSelectedItem, LVIS_SELECTED));
#endif
ASSERT(pos==NULL);
ASSERT(nSelectedItem!=-1);
}
m_listInstances.DeleteAllItems();
// populate list of all running instances
CDWordArray arrInstances;
VERIFY(m_instanceManager.GetInstanceCollection(arrInstances));
ASSERT(arrInstances.GetSize()==nInstanceRunningCount);
DWORD dwCurrentPID=m_instanceManager.GetCurrentInstanceID();
for(int nIndex=0; nIndex<nInstanceRunningCount; nIndex++)
{
CString sItem;
sItem.Format(IDS_OX_CSTMZEINSTANCEINSTANCEF,nIndex+1);//"Instance %d"
VERIFY(m_listInstances.InsertItem(nIndex,sItem)==nIndex);
CString sPID;
sPID.Format(_T("%d"),arrInstances[nIndex]);
m_listInstances.SetItemText(nIndex,1,sPID);
VERIFY(sItem.LoadString(IDS_OX_CSTMZEINSTANCECURRENT));//"Current"
if(arrInstances[nIndex]==dwCurrentPID)
m_listInstances.SetItemText(nIndex,2,sItem);
m_listInstances.SetItemData(nIndex,(LPARAM)arrInstances[nIndex]);
}
if(nSelectedItem>=0 && nSelectedItem<m_listInstances.GetItemCount())
{
m_listInstances.SetItemState(nSelectedItem,LVIS_SELECTED|LVIS_FOCUSED,
LVIS_SELECTED|LVIS_FOCUSED);
}
}
void COXCustomizeInstanceManagerPage::ShowVars()
{
if(!m_bInitialized)
return;
if(!UpdateData(TRUE))
return;
GetDlgItem(IDC_OX_EDIT_LIMIT_NUMBER)->EnableWindow(m_nInstanceLimitType==2);
GetDlgItem(IDC_OX_SPIN_LIMIT_NUMBER)->EnableWindow(m_nInstanceLimitType==2);
#if _MFC_VER > 0x0421
POSITION pos=m_listInstances.GetFirstSelectedItemPosition();
#else
ASSERT(::IsWindow(m_listInstances.m_hWnd));
POSITION pos = (POSITION) (1+m_listInstances.GetNextItem(-1, LVIS_SELECTED));
#endif
if(pos!=NULL)
{
#if _MFC_VER > 0x0421
int nSelectedItem=m_listInstances.GetNextSelectedItem(pos);
#else
ASSERT(::IsWindow(m_listInstances.m_hWnd));
int nSelectedItem = (int)pos-1;
POSITION npos = (POSITION) (1+m_listInstances.GetNextItem(nSelectedItem, LVIS_SELECTED));
#endif
ASSERT(pos==NULL);
ASSERT(nSelectedItem!=-1);
DWORD_PTR dwPID=m_listInstances.GetItemData(nSelectedItem);
BOOL bCurrentInstance=(dwPID==m_instanceManager.GetCurrentInstanceID());
GetDlgItem(IDC_OX_BUTTON_CLOSE)->EnableWindow(TRUE);
GetDlgItem(IDC_OX_BUTTON_SWITCH_TO)->EnableWindow(!bCurrentInstance);
GetDlgItem(IDC_OX_BUTTON_BRING_TO_FRONT)->EnableWindow(!bCurrentInstance);
DWORD dwStyle=
::GetWindowLongPtr(m_instanceManager.GetMainWindow(dwPID),GWL_STYLE);
BOOL bSysMenu=(dwStyle&WS_SYSMENU)!=0;
BOOL bMaximizeBtn=bSysMenu & ((dwStyle&WS_MAXIMIZEBOX)!=0);
BOOL bCanMaximize=bMaximizeBtn & ((dwStyle&WS_MAXIMIZE)==0);
BOOL bMinimizeBtn=bSysMenu & ((dwStyle&WS_MINIMIZEBOX)!=0);
BOOL bCanMinimize=bMinimizeBtn & ((dwStyle&WS_MINIMIZE)==0);
GetDlgItem(IDC_OX_BUTTON_MAXIMIZE)->EnableWindow(bCanMaximize);
GetDlgItem(IDC_OX_BUTTON_MINIMIZE)->EnableWindow(bCanMinimize);
GetDlgItem(IDC_OX_BUTTON_RESTORE)->
EnableWindow(!((bCanMaximize && bCanMinimize) ||
(!bMaximizeBtn && bCanMinimize) || !bSysMenu));
}
else
{
GetDlgItem(IDC_OX_BUTTON_CLOSE)->EnableWindow(FALSE);
GetDlgItem(IDC_OX_BUTTON_SWITCH_TO)->EnableWindow(FALSE);
GetDlgItem(IDC_OX_BUTTON_BRING_TO_FRONT)->EnableWindow(FALSE);
GetDlgItem(IDC_OX_BUTTON_MAXIMIZE)->EnableWindow(FALSE);
GetDlgItem(IDC_OX_BUTTON_MINIMIZE)->EnableWindow(FALSE);
GetDlgItem(IDC_OX_BUTTON_RESTORE)->EnableWindow(FALSE);
}
}
void COXCustomizeInstanceManagerPage::OnChangeEditLimitNumber()
{
// TODO: If this is a RICHEDIT control, the control will not
// send this notification unless you override the COXCustomizePage::OnInitDialog()
// function and call CRichEditCtrl().SetEventMask()
// with the ENM_CHANGE flag ORed into the mask.
// TODO: Add your control notification handler code here
if(!m_bInitialized)
return;
if(!UpdateData(TRUE))
return;
}
void COXCustomizeInstanceManagerPage::OnItemchangedListInstances(NMHDR* pNMHDR,
LRESULT* pResult)
{
NM_LISTVIEW* pNMListView=(NM_LISTVIEW*)pNMHDR;
UNREFERENCED_PARAMETER(pNMListView);
// TODO: Add your control notification handler code here
ShowVars();
*pResult = 0;
}
// v9.3 - update 03 - 64-bit - using OXTPARAM here - see UTB64Bit.h
void COXCustomizeInstanceManagerPage::OnTimer(OXTPARAM nIDEvent)
{
// TODO: Add your message handler code here and/or call default
if(nIDEvent==m_nTimerCheckInstancesID)
{
int nNewInstanceCount=m_instanceManager.GetNumberOfInstances();
if(nNewInstanceCount!=m_listInstances.GetItemCount())
{
PopulateInstancesList();
}
return;
}
COXCustomizePage::OnTimer(nIDEvent);
}
void COXCustomizeInstanceManagerPage::OnDestroy()
{
COXCustomizePage::OnDestroy();
// TODO: Add your message handler code here
if(m_nTimerCheckInstancesID!=0)
{
KillTimer(m_nTimerCheckInstancesID);
m_nTimerCheckInstancesID=0;
}
}
void COXCustomizeInstanceManagerPage::OnButtonBringToFront()
{
// TODO: Add your control notification handler code here
#if _MFC_VER > 0x0421
POSITION pos=m_listInstances.GetFirstSelectedItemPosition();
#else
ASSERT(::IsWindow(m_listInstances.m_hWnd));
POSITION pos = (POSITION) (1+m_listInstances.GetNextItem(-1, LVIS_SELECTED));
#endif
ASSERT(pos!=NULL);
#if _MFC_VER > 0x0421
int nSelectedItem=m_listInstances.GetNextSelectedItem(pos);
#else
ASSERT(::IsWindow(m_listInstances.m_hWnd));
int nSelectedItem = (int)pos-1;
POSITION npos = (POSITION) (1+m_listInstances.GetNextItem(nSelectedItem, LVIS_SELECTED));
#endif
ASSERT(pos==NULL);
ASSERT(nSelectedItem!=-1);
DWORD_PTR dwPID=m_listInstances.GetItemData(nSelectedItem);
BOOL bCurrentInstance=(dwPID==m_instanceManager.GetCurrentInstanceID());
ASSERT(!bCurrentInstance);
HWND hWnd= (HWND)(DWORD_PTR)m_instanceManager.GetMainWindow(dwPID);
if(::GetWindowLongPtr(hWnd,GWL_STYLE)&WS_MINIMIZE)
{
OnButtonRestore();
AfxGetMainWnd()->SetForegroundWindow();
}
else
{
::SetWindowPos(hWnd,AfxGetMainWnd()->GetSafeHwnd(),0,0,0,0,
SWP_SHOWWINDOW|SWP_ASYNCWINDOWPOS|SWP_NOACTIVATE|
SWP_NOMOVE|SWP_NOSIZE|SWP_SHOWWINDOW);
}
ShowVars();
}
void COXCustomizeInstanceManagerPage::OnButtonClose()
{
// TODO: Add your control notification handler code here
#if _MFC_VER > 0x0421
POSITION pos=m_listInstances.GetFirstSelectedItemPosition();
#else
ASSERT(::IsWindow(m_listInstances.m_hWnd));
POSITION pos = (POSITION) (1+m_listInstances.GetNextItem(-1, LVIS_SELECTED));
#endif
ASSERT(pos!=NULL);
#if _MFC_VER > 0x0421
int nSelectedItem=m_listInstances.GetNextSelectedItem(pos);
#else
ASSERT(::IsWindow(m_listInstances.m_hWnd));
int nSelectedItem = (int)pos-1;
POSITION npos = (POSITION) (1+m_listInstances.GetNextItem(nSelectedItem, LVIS_SELECTED));
#endif
ASSERT(pos==NULL);
ASSERT(nSelectedItem!=-1);
DWORD_PTR dwPID=m_listInstances.GetItemData(nSelectedItem);
VERIFY(m_instanceManager.CloseInstance(dwPID));
ShowVars();
}
void COXCustomizeInstanceManagerPage::OnButtonMaximize()
{
// TODO: Add your control notification handler code here
#if _MFC_VER > 0x0421
POSITION pos=m_listInstances.GetFirstSelectedItemPosition();
#else
ASSERT(::IsWindow(m_listInstances.m_hWnd));
POSITION pos = (POSITION) (1+m_listInstances.GetNextItem(-1, LVIS_SELECTED));
#endif
ASSERT(pos!=NULL);
#if _MFC_VER > 0x0421
int nSelectedItem=m_listInstances.GetNextSelectedItem(pos);
#else
ASSERT(::IsWindow(m_listInstances.m_hWnd));
int nSelectedItem = (int)pos-1;
POSITION npos = (POSITION) (1+m_listInstances.GetNextItem(nSelectedItem, LVIS_SELECTED));
#endif
ASSERT(pos==NULL);
ASSERT(nSelectedItem!=-1);
DWORD_PTR dwPID=m_listInstances.GetItemData(nSelectedItem);
HWND hWnd=m_instanceManager.GetMainWindow(dwPID);
if(::GetWindowLongPtr(hWnd,GWL_STYLE)&WS_MINIMIZE)
{
::SendMessage(hWnd,WM_SYSCOMMAND,SC_MAXIMIZE,(LPARAM)hWnd);
AfxGetMainWnd()->SetForegroundWindow();
}
else
{
::SendMessage(hWnd,WM_SYSCOMMAND,SC_MAXIMIZE,(LPARAM)hWnd);
}
ShowVars();
}
void COXCustomizeInstanceManagerPage::OnButtonMinimize()
{
// TODO: Add your control notification handler code here
#if _MFC_VER > 0x0421
POSITION pos=m_listInstances.GetFirstSelectedItemPosition();
#else
ASSERT(::IsWindow(m_listInstances.m_hWnd));
POSITION pos = (POSITION) (1+m_listInstances.GetNextItem(-1, LVIS_SELECTED));
#endif
ASSERT(pos!=NULL);
#if _MFC_VER > 0x0421
int nSelectedItem=m_listInstances.GetNextSelectedItem(pos);
#else
ASSERT(::IsWindow(m_listInstances.m_hWnd));
int nSelectedItem = (int)pos-1;
POSITION npos = (POSITION) (1+m_listInstances.GetNextItem(nSelectedItem, LVIS_SELECTED));
#endif
ASSERT(pos==NULL);
ASSERT(nSelectedItem!=-1);
DWORD_PTR dwPID=m_listInstances.GetItemData(nSelectedItem);
HWND hWnd=m_instanceManager.GetMainWindow(dwPID);
::SendMessage(hWnd,WM_SYSCOMMAND,SC_MINIMIZE,(LPARAM)hWnd);
ShowVars();
}
void COXCustomizeInstanceManagerPage::OnButtonRestore()
{
// TODO: Add your control notification handler code here
#if _MFC_VER > 0x0421
POSITION pos=m_listInstances.GetFirstSelectedItemPosition();
#else
ASSERT(::IsWindow(m_listInstances.m_hWnd));
POSITION pos = (POSITION) (1+m_listInstances.GetNextItem(-1, LVIS_SELECTED));
#endif
ASSERT(pos!=NULL);
#if _MFC_VER > 0x0421
int nSelectedItem=m_listInstances.GetNextSelectedItem(pos);
#else
ASSERT(::IsWindow(m_listInstances.m_hWnd));
int nSelectedItem = (int)pos-1;
POSITION npos = (POSITION) (1+m_listInstances.GetNextItem(nSelectedItem, LVIS_SELECTED));
#endif
ASSERT(pos==NULL);
ASSERT(nSelectedItem!=-1);
DWORD_PTR dwPID=m_listInstances.GetItemData(nSelectedItem);
HWND hWnd=m_instanceManager.GetMainWindow(dwPID);
if(::GetWindowLongPtr(hWnd,GWL_STYLE)&WS_MINIMIZE)
{
::SendMessage(hWnd,WM_SYSCOMMAND,SC_RESTORE,(LPARAM)hWnd);
AfxGetMainWnd()->SetForegroundWindow();
}
else
{
::SendMessage(hWnd,WM_SYSCOMMAND,SC_RESTORE,(LPARAM)hWnd);
}
ShowVars();
}
void COXCustomizeInstanceManagerPage::OnButtonSwitchTo()
{
// TODO: Add your control notification handler code here
#if _MFC_VER > 0x0421
POSITION pos=m_listInstances.GetFirstSelectedItemPosition();
#else
ASSERT(::IsWindow(m_listInstances.m_hWnd));
POSITION pos = (POSITION) (1+m_listInstances.GetNextItem(-1, LVIS_SELECTED));
#endif
ASSERT(pos!=NULL);
#if _MFC_VER > 0x0421
int nSelectedItem=m_listInstances.GetNextSelectedItem(pos);
#else
ASSERT(::IsWindow(m_listInstances.m_hWnd));
int nSelectedItem = (int)pos-1;
POSITION npos = (POSITION) (1+m_listInstances.GetNextItem(nSelectedItem, LVIS_SELECTED));
#endif
ASSERT(pos==NULL);
ASSERT(nSelectedItem!=-1);
DWORD_PTR dwPID=m_listInstances.GetItemData(nSelectedItem);
BOOL bCurrentInstance=(dwPID==m_instanceManager.GetCurrentInstanceID());
ASSERT(!bCurrentInstance);
HWND hWnd=m_instanceManager.GetMainWindow(dwPID);
::SetForegroundWindow(hWnd);
if(::GetWindowLongPtr(hWnd,GWL_STYLE)&WS_MINIMIZE)
{
::SendMessage(hWnd,WM_SYSCOMMAND,SC_RESTORE,(LPARAM)hWnd);
}
ShowVars();
}