|
|
//+-------------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (C) Microsoft Corporation, 1996 - 1999
//
// File: ispudlg.cpp
//
// Contents: Microsoft Internet Security Office Helper
//
// History: 14-Aug-1997 pberkman created
//
//--------------------------------------------------------------------------
#include "global.hxx"
#include "ispudlg.hxx"
INT_PTR CALLBACK UIMessageProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); INT_PTR CALLBACK ProcessingDialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
ISPUdlg_::ISPUdlg_(HWND hWndParent, HINSTANCE hInst, DWORD dwDialogId) { m_dwDialogId = dwDialogId; m_hInst = hInst; m_hWndParent = hWndParent; m_hWndMe = NULL; m_hrResult = E_NOTIMPL; m_hDlgProcessing = NULL; }
ISPUdlg_::~ISPUdlg_(void) { if (m_hDlgProcessing) { DestroyWindow(m_hDlgProcessing); } }
HRESULT ISPUdlg_::Invoke(void) {
if (DialogBoxParam(m_hInst, MAKEINTRESOURCE(m_dwDialogId), m_hWndParent, UIMessageProc, (LPARAM)this) == (-1)) { return(HRESULT_FROM_WIN32(GetLastError())); }
return(m_hrResult); }
void ISPUdlg_::ShowError(HWND hWnd, DWORD dwStringId, DWORD dwTitleId) { char szTitle[MAX_PATH + 1]; char szErr[MAX_PATH + 1];
LoadStringA(m_hInst, dwTitleId, &szTitle[0], MAX_PATH); LoadStringA(m_hInst, dwStringId, &szErr[0], MAX_PATH);
MessageBeep(MB_ICONEXCLAMATION);
MessageBox((hWnd) ? hWnd : m_hWndParent, &szErr[0], &szTitle[0], MB_OK | MB_ICONERROR); }
void ISPUdlg_::StartShowProcessing(DWORD dwDialogId, DWORD dwTextControlId, DWORD dwStringId) { char szText[MAX_PATH + 1];
if (m_hDlgProcessing) { DestroyWindow(m_hDlgProcessing); }
szText[0] = NULL; LoadStringA(m_hInst, dwStringId, &szText[0], MAX_PATH);
m_hDlgProcessing = CreateDialog(m_hInst, MAKEINTRESOURCE(dwDialogId), m_hWndParent, ProcessingDialogProc);
this->Center(m_hDlgProcessing);
ShowWindow(m_hDlgProcessing, SW_SHOW);
SetDlgItemText(m_hDlgProcessing, dwTextControlId, &szText[0]); }
void ISPUdlg_::ChangeShowProcessing(DWORD dwTextControlId, DWORD dwStirngId) { if (!(m_hDlgProcessing)) { return; }
char szText[MAX_PATH + 1];
szText[0] = NULL; LoadStringA(m_hInst, dwStirngId, &szText[0], MAX_PATH);
SetDlgItemText(m_hDlgProcessing, dwTextControlId, &szText[0]); }
void ISPUdlg_::EndShowProcessing(void) { if (m_hDlgProcessing) { DestroyWindow(m_hDlgProcessing); m_hDlgProcessing = NULL; } }
BOOL ISPUdlg_::OnMessage(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_INITDIALOG: m_hWndMe = hWnd;
this->Center();
return(this->OnInitDialog(hWnd, wParam, lParam));
case WM_COMMAND: return(this->OnCommand(hWnd, uMsg, wParam, lParam));
case WM_CLOSE: return(this->OnCancel(hWnd));
case WM_HELP: return(this->OnHelp(hWnd, wParam, lParam));
default: return(FALSE); }
return(TRUE); }
BOOL ISPUdlg_::OnOK(HWND hWnd) { EndDialog(hWnd, (int)m_hrResult);
return(TRUE); }
BOOL ISPUdlg_::OnCancel(HWND hWnd) { EndDialog(hWnd, (int)m_hrResult);
return(TRUE); }
void ISPUdlg_::Center(HWND hWnd2Center) { RECT rcDlg; RECT rcArea; RECT rcCenter; HWND hWndParent; HWND hWndCenter; DWORD dwStyle; int w_Dlg; int h_Dlg; int xLeft; int yTop;
if (!(hWnd2Center)) { hWnd2Center = m_hWndMe; }
GetWindowRect(hWnd2Center, &rcDlg);
dwStyle = (DWORD)GetWindowLong(hWnd2Center, GWL_STYLE);
if (dwStyle & WS_CHILD) { hWndCenter = GetParent(hWnd2Center);
hWndParent = GetParent(hWnd2Center);
GetClientRect(hWndParent, &rcArea); GetClientRect(hWndCenter, &rcCenter); MapWindowPoints(hWndCenter, hWndParent, (POINT *)&rcCenter, 2); } else { hWndCenter = GetWindow(hWnd2Center, GW_OWNER);
if (hWndCenter) { dwStyle = (DWORD)GetWindowLong(hWndCenter, GWL_STYLE);
if (!(dwStyle & WS_VISIBLE) || (dwStyle & WS_MINIMIZE)) { hWndCenter = NULL; } }
SystemParametersInfo(SPI_GETWORKAREA, NULL, &rcArea, NULL);
if (hWndCenter) { GetWindowRect(hWndCenter, &rcCenter); } else { rcCenter = rcArea; }
}
w_Dlg = rcDlg.right - rcDlg.left; h_Dlg = rcDlg.bottom - rcDlg.top;
xLeft = (rcCenter.left + rcCenter.right) / 2 - w_Dlg / 2; yTop = (rcCenter.top + rcCenter.bottom) / 2 - h_Dlg / 2;
if (xLeft < rcArea.left) { xLeft = rcArea.left; } else if ((xLeft + w_Dlg) > rcArea.right) { xLeft = rcArea.right - w_Dlg; }
if (yTop < rcArea.top) { yTop = rcArea.top; } else if ((yTop + h_Dlg) > rcArea.bottom) { yTop = rcArea.bottom - h_Dlg; }
SetWindowPos(hWnd2Center, NULL, xLeft, yTop, -1, -1, SWP_NOZORDER | SWP_NOSIZE | SWP_NOACTIVATE); }
void ISPUdlg_::SetItemText(DWORD dwControlId, WCHAR *pwszText) { DWORD cbsz; char *psz;
cbsz = (DWORD)WideCharToMultiByte(0, 0, pwszText, wcslen(pwszText) + 1, NULL, 0, NULL, NULL);
if (cbsz < 1) { return; }
if (!(psz = new char[cbsz + 1])) { return; } psz[0] = NULL;
WideCharToMultiByte(0, 0, pwszText, wcslen(pwszText) + 1, psz, cbsz, NULL, NULL);
SetDlgItemText(m_hWndMe, (UINT)dwControlId, psz);
delete psz; }
BOOL ISPUdlg_::GetItemText(DWORD dwControlId, WCHAR **ppwszText) { DWORD cbsz; char *psz;
*ppwszText = NULL;
cbsz = (DWORD)SendDlgItemMessage(m_hWndMe, (UINT)dwControlId, WM_GETTEXTLENGTH, 0, 0);
if (cbsz < 1) { return(FALSE); }
if (!(psz = new char[cbsz + 1])) { return(FALSE); }
psz[0] = NULL;
GetDlgItemText(m_hWndMe, (UINT)dwControlId, psz, cbsz + 1);
if (!(*ppwszText = new WCHAR[cbsz + 1])) { delete psz; return(FALSE); }
MultiByteToWideChar(0, 0, psz, -1, *ppwszText, cbsz + 1);
delete psz;
return(TRUE); }
//////////////////////////////////////////////////////////////////////////
////
//// local
////
INT_PTR CALLBACK UIMessageProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { ISPUdlg_ *pUI;
if (uMsg == WM_INITDIALOG) { pUI = (ISPUdlg_ *)lParam;
SetWindowLongPtr(hWnd, DWLP_USER, (INT_PTR)lParam); } else { pUI = (ISPUdlg_ *)GetWindowLongPtr(hWnd, DWLP_USER); }
if (!(pUI)) { return(FALSE); }
return(pUI->OnMessage(hWnd, uMsg, wParam, lParam)); }
INT_PTR CALLBACK ProcessingDialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch(uMsg) { case WM_INITDIALOG: return(TRUE); }
return(FALSE); }
|