windows-nt/Source/XPSP1/NT/enduser/stuff/hhctrl/userwait.cpp
2020-09-26 16:20:57 +08:00

113 lines
2.5 KiB
C++

// Copyright (C) 1993-1997 Microsoft Corporation. All rights reserved.
#include "header.h"
#include "resource.h"
#include "lockout.h"
#include "userwait.h"
#include "cdlg.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
// class constructor
//
CUWait::CUWait(HWND hwndParent)
{
m_hwndParent = hwndParent;
m_hwndUWait = NULL;
m_bVisable = FALSE;
m_bUserCancel = FALSE;
// create the thread
//
LPCTSTR lpDialogTemplate = MAKEINTRESOURCE(IDD_SEARCH_CANCEL);
m_LockOut.LockOut(hwndParent);
if(g_bWinNT5)
{
CreateDialogParamW(_Module.GetResourceInstance(), MAKEINTRESOURCEW(IDD_SEARCH_CANCEL), m_hwndParent,
(DLGPROC) CWaitDlgProc, (LPARAM) this);
}
else
{
CreateDialogParam(_Module.GetResourceInstance(), lpDialogTemplate, m_hwndParent,
(DLGPROC) CWaitDlgProc, (LPARAM) this);
}
if(!IsValidWindow(m_hwndUWait))
m_LockOut.Unlock();
if(IsValidWindow(m_hwndUWait))
ShowWindow(m_hwndUWait, SW_SHOW);
MSG msg;
int iCount = 256;
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) && iCount--)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
// class destructor
//
CUWait::~CUWait()
{
// destroy the dialog
//
if(m_hwndUWait)
SendMessage(m_hwndUWait, WM_CLOSE, 0, 0);
if (IsValidWindow(m_hwndUWait))
DestroyWindow(m_hwndUWait);
}
// Dialog procedure for search cancel dialog
//
BOOL CALLBACK CWaitDlgProc(HWND hdlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
CUWait* pUWait = (CUWait*) GetWindowLongPtr(hdlg, GWLP_USERDATA);
switch (msg) {
case WM_INITDIALOG:
pUWait = (CUWait*) lParam;
SetWindowLongPtr(hdlg, GWLP_USERDATA, lParam);
pUWait->m_hwndUWait = hdlg;
CenterWindow(pUWait->m_hwndParent, hdlg);
SetWindowPos(hdlg, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
return TRUE;
case WM_COMMAND:
{
switch (LOWORD(wParam))
{
case IDCANCEL:
EnableWindow(GetDlgItem(hdlg,IDCANCEL),FALSE);
pUWait->m_bUserCancel = TRUE;
break;
}
}
break;
case WM_CLOSE:
pUWait->m_bUserCancel = TRUE;
pUWait->m_LockOut.Unlock();
EndDialog(hdlg, FALSE);
break;
default:
return FALSE;
}
return FALSE;
}