mirror of https://github.com/tongzx/nt5src
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
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);
|
|
}
|
|
|