// 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; }