Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

339 lines
7.1 KiB

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