Leaked source code of windows server 2003
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.
 
 
 
 
 
 

180 lines
5.5 KiB

/*****************************************************************************\
FILE: wizard.cpp
DESCRIPTION:
This file implements the wizard used to "AutoDiscover" the data that
matches an email address to a protocol. It will also provide other UI
needed in that process.
BryanSt 3/5/2000
Copyright (C) Microsoft Corp 2000-2000. All rights reserved.
\*****************************************************************************/
#include "priv.h"
#include <atlbase.h> // USES_CONVERSION
#include "util.h"
#include "objctors.h"
#include <comdef.h>
#include "wizard.h"
#include "mailbox.h"
#ifdef FEATURE_MAILBOX
#define WIZDLG(name, dlgproc, dwFlags) \
{ MAKEINTRESOURCE(IDD_##name##_PAGE), dlgproc, MAKEINTRESOURCE(IDS_##name##), MAKEINTRESOURCE(IDS_##name##_SUB), dwFlags }
// The wizard pages we are adding
struct
{
LPCWSTR idPage;
DLGPROC pDlgProc;
LPCWSTR pHeading;
LPCWSTR pSubHeading;
DWORD dwFlags;
}
g_pages[] =
{
WIZDLG(ASSOC_GETEMAILADDRESS, GetEmailAddressDialogProc, 0),
WIZDLG(AUTODISCOVER_PROGRESS, MailBoxProgressDialogProc, 0),
WIZDLG(MANUALLY_CHOOSE_APP, ChooseAppDialogProc, 0),
};
//-----------------------------------------------------------------------------
// Main entry point used to invoke the wizard.
//-----------------------------------------------------------------------------
/*
static WNDPROC _oldDlgWndProc;
LRESULT CALLBACK _WizardSubWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
//
// on WM_WINDOWPOSCHANGING and the window is moving then lets centre it onto the
// desktop window. unfortunately setting the DS_CENTER bit doesn't buy us anything
// as the wizard is resized after creation.
//
if ( uMsg == WM_WINDOWPOSCHANGING )
{
LPWINDOWPOS lpwp = (LPWINDOWPOS)lParam;
RECT rcDlg, rcDesktop;
GetWindowRect(hwnd, &rcDlg);
GetWindowRect(GetDesktopWindow(), &rcDesktop);
lpwp->x = ((rcDesktop.right-rcDesktop.left)-(rcDlg.right-rcDlg.left))/2;
lpwp->y = ((rcDesktop.bottom-rcDesktop.top)-(rcDlg.bottom-rcDlg.top))/2;
lpwp->flags &= ~SWP_NOMOVE;
}
return _oldDlgWndProc(hwnd, uMsg, wParam, lParam);
}
*/
int CALLBACK _PropSheetCB(HWND hwnd, UINT uMsg, LPARAM lParam)
{
switch (uMsg)
{
// in pre-create lets set the window styles accorindlgy
// - remove the context menu and system menu
case PSCB_PRECREATE:
{
DLGTEMPLATE *pdlgtmp = (DLGTEMPLATE*)lParam;
pdlgtmp->style &= ~(DS_CONTEXTHELP|WS_SYSMENU);
break;
}
// we now have a dialog, so lets sub class it so we can stop it being
// move around.
case PSCB_INITIALIZED:
{
// TODO: David, why do this?
// if ( g_uWizardIs != NAW_NETID )
// _oldDlgWndProc = (WNDPROC)SetWindowLongPtr(hwnd, GWLP_WNDPROC, (LONG_PTR)_WizardSubWndProc);
break;
}
case WM_NOTIFY:
{
LPNMHDR pnmh = (LPNMHDR)lParam;
switch (pnmh->code)
{
case LVN_GETDISPINFO:
uMsg++;
break;
}
}
default:
TraceMsg(TF_ALWAYS, "_PropSheetCB(uMsg = %d)", uMsg);
break;
}
return FALSE;
}
STDAPI DisplayMailBoxWizard(LPARAM lParam, BOOL fShowGetEmailPage)
{
HWND hwndParent = NULL;
HRESULT hr = S_OK;
PROPSHEETHEADER psh = { 0 };
HPROPSHEETPAGE rghpage[ARRAYSIZE(g_pages)];
INT_PTR nResult;
int nCurrentPage;
int nPages;
int nFirstPage;
if (fShowGetEmailPage)
{
nFirstPage = 0;
nPages = ARRAYSIZE(g_pages);
}
else
{
nFirstPage = 1;
nPages = ARRAYSIZE(g_pages) - 1;
}
// build the pages for the wizard.
for (nCurrentPage = 0; nCurrentPage < ARRAYSIZE(g_pages) ; nCurrentPage++ )
{
PROPSHEETPAGE psp = { 0 };
WCHAR szBuffer[MAX_PATH] = { 0 };
psp.dwSize = sizeof(PROPSHEETPAGE);
psp.hInstance = HINST_THISDLL;
psp.lParam = lParam;
psp.dwFlags = PSP_DEFAULT | PSP_HIDEHEADER | g_pages[nCurrentPage + nFirstPage].dwFlags; // Do we want: PSP_USETITLE | PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE | (PSP_USECALLBACK | )
psp.pszTemplate = g_pages[nCurrentPage + nFirstPage].idPage;
psp.pfnDlgProc = g_pages[nCurrentPage + nFirstPage].pDlgProc;
psp.pszTitle = MAKEINTRESOURCE(IDS_AUTODISCOVER_WIZARD_CAPTION);
psp.pszHeaderTitle = g_pages[nCurrentPage + nFirstPage].pHeading;
psp.pszHeaderSubTitle = g_pages[nCurrentPage + nFirstPage].pSubHeading;
rghpage[nCurrentPage] = CreatePropertySheetPage(&psp);
}
// wizard pages are ready, so lets display the wizard.
psh.dwSize = sizeof(PROPSHEETHEADER);
psh.hwndParent = hwndParent;
psh.hInstance = HINST_THISDLL;
// TODO: We will want to add this PSH_HASHELP, PSH_USEICONID
psh.dwFlags = PSH_NOCONTEXTHELP | PSH_WIZARD | PSH_WIZARD_LITE | PSH_NOAPPLYNOW | PSH_USECALLBACK; // PSH_WATERMARK
// psh.pszbmHeader = MAKEINTRESOURCE(IDB_PSW_BANNER);
// psh.pszbmWatermark = MAKEINTRESOURCE(IDB_PSW_WATERMARK);
psh.nPages = nPages;
psh.phpage = rghpage;
psh.pfnCallback = _PropSheetCB;
nResult = PropertySheet(&psh);
return hr;
}
#endif // FEATURE_MAILBOX