193 lines
4.2 KiB
C++
193 lines
4.2 KiB
C++
//-----------------------------------------------------------------------------
|
|
// Microsoft OLE DB TABLECOPY Sample
|
|
// Copyright (C) 1991-2000 Microsoft Corporation
|
|
//
|
|
// @doc
|
|
//
|
|
// @module PROGRESS.CPP
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Includes
|
|
//
|
|
////////////////////////////////////////////////////////////////////
|
|
#include "progress.h"
|
|
#include "common.h"
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// CProgress::CProgress
|
|
//
|
|
////////////////////////////////////////////////////////////////////
|
|
CProgress::CProgress(HWND hWnd, HINSTANCE hInst)
|
|
: CDialogBase(hWnd, hInst)
|
|
{
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// CProgress::~CProgress
|
|
//
|
|
////////////////////////////////////////////////////////////////////
|
|
CProgress::~CProgress()
|
|
{
|
|
Destroy();
|
|
}
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// BOOL WINAPI CProgress::DlgProc
|
|
//
|
|
////////////////////////////////////////////////////////////////////
|
|
BOOL WINAPI CProgress::DlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
switch(msg)
|
|
{
|
|
case WM_INITDIALOG:
|
|
{
|
|
//Save the this pointer, since this is a static method
|
|
Busy();
|
|
CProgress* pThis = (CProgress*)lParam;
|
|
SetWindowLongPtrA(hWnd, GWLP_USERDATA, (LONG_PTR)pThis);
|
|
|
|
//On INIT we know we have a valid hWnd to store
|
|
pThis->m_hWnd = hWnd;
|
|
|
|
CenterDialog(hWnd);
|
|
return TRUE;
|
|
}
|
|
break;
|
|
|
|
case WM_COMMAND:
|
|
{
|
|
// All buttons are handled the same way
|
|
//Restore instance pointer, since this is a static function
|
|
CProgress* pThis = (CProgress*)GetWindowLongPtrA(hWnd, GWLP_USERDATA);
|
|
|
|
switch(GET_WM_COMMAND_ID(wParam, lParam))
|
|
{
|
|
case IDCANCEL:
|
|
Busy();
|
|
pThis->m_fCancel = TRUE;
|
|
return TRUE;
|
|
}
|
|
return FALSE;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// ULONG CProgress::Display
|
|
//
|
|
////////////////////////////////////////////////////////////////////
|
|
INT_PTR CProgress::Display()
|
|
{
|
|
m_fCancel = FALSE;
|
|
|
|
//Create a ModeLess Dialog Box
|
|
m_hWnd = CreateDialogParam(m_hInst, MAKEINTRESOURCE(IDD_PROGRESS), NULL, (DLGPROC)DlgProc, (LPARAM)this);
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// ULONG CProgress::Destroy
|
|
//
|
|
////////////////////////////////////////////////////////////////////
|
|
ULONG CProgress::Destroy()
|
|
{
|
|
if(m_hWnd)
|
|
{
|
|
DestroyWindow(m_hWnd);
|
|
m_hWnd = NULL;
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// BOOL CProgress::SetHeading
|
|
//
|
|
////////////////////////////////////////////////////////////////////
|
|
BOOL CProgress::SetHeading(WCHAR* pwszText)
|
|
{
|
|
ASSERT(pwszText);
|
|
|
|
wSetDlgItemText(m_hWnd, IDT_STATUS, pwszText);
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// BOOL CProgress::SetText
|
|
//
|
|
////////////////////////////////////////////////////////////////////
|
|
BOOL CProgress::SetText(WCHAR* pwszText)
|
|
{
|
|
ASSERT(pwszText);
|
|
|
|
wSetDlgItemText(m_hWnd, IDT_STAT_INFO, pwszText);
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// BOOL CProgress::Cancel
|
|
//
|
|
////////////////////////////////////////////////////////////////////
|
|
BOOL CProgress::Cancel()
|
|
{
|
|
MSG msg;
|
|
|
|
//Must have an existing window to cancel
|
|
if(m_hWnd==NULL)
|
|
return FALSE;
|
|
|
|
while(PeekMessage(&msg, m_hWnd, 0, 0, PM_REMOVE))
|
|
{
|
|
if(!IsDialogMessage(m_hWnd, &msg))
|
|
{
|
|
TranslateMessage(&msg);
|
|
DispatchMessage(&msg);
|
|
}
|
|
}
|
|
|
|
return m_fCancel;
|
|
}
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// BOOL CProgress::Update
|
|
//
|
|
////////////////////////////////////////////////////////////////////
|
|
BOOL CProgress::Update(WCHAR* pwszText)
|
|
{
|
|
ASSERT(pwszText);
|
|
|
|
//Update the progress text
|
|
SetText(pwszText);
|
|
|
|
// Now check for a cancel from the user, by checking
|
|
// the messages from the user
|
|
if(Cancel())
|
|
{
|
|
if(IDYES == wMessageBox(m_hWnd, MB_TASKMODAL | MB_ICONEXCLAMATION | MB_YESNO, wsz_CANCEL, wsz_CANCEL_OP))
|
|
{
|
|
//Indicate the users wishes to stop
|
|
return FALSE;
|
|
}
|
|
else
|
|
{
|
|
m_fCancel = FALSE;
|
|
}
|
|
}
|
|
|
|
//Indicate the user wishes to continue
|
|
return TRUE;
|
|
} |