windows-nt/Source/XPSP1/NT/admin/netui/mprui/mpr/dlg.cxx
2020-09-26 16:20:57 +08:00

370 lines
9.1 KiB
C++

/**********************************************************************/
/** Microsoft Windows NT **/
/** Copyright(c) Microsoft Corp., 1991 **/
/**********************************************************************/
/*
dlg.cxx
It contains the WNetConnectionDialog source.
FILE HISTORY:
kevinl 31-Dec-91 Created
terryk 03-Jan-92 capitalize the manifest
Johnl 10-Jan-1992 Cleaned up
BruceFo 23-May-1995 Add WNetConnectionDialog1 support
*/
#define INCL_NETCONS
#define INCL_NETCONFIG
#define INCL_NETSERVICE
#define INCL_NETLIB
#define INCL_WINDOWS
#define INCL_NETERRORS
#define INCL_DOSERRORS
#include <lmui.hxx>
#define INCL_BLT_CONTROL
#define INCL_BLT_CLIENT
#define INCL_BLT_MSGPOPUP
#include <blt.hxx>
#include <dbgstr.hxx>
#include <mprconn.h>
#include <mprmisc.hxx>
#include <mprbrows.hxx>
#include <shellapi.h>
#include <shlapip.h>
extern "C"
{
#include <uigenhlp.h>
}
#include <wfext.h>
#include <fmx.hxx>
#define THIS_DLL_NAME SZ("mprui.dll")
APIERR
InitBrowsing(
VOID
);
/*******************************************************************
NAME: InitBrowsing
SYNOPSIS: Internal API for initializing browsing
ENTRY:
EXIT:
RETURNS:
NOTES: The MprBrowseDialog and MprConnectionDialog has
a second worker thread. In order to prevent
the dll from unloading itself while the worker
thread is still active, we need to do a loadlibrary
on the current dll.
HISTORY:
YiHsins 21-Mar-1993 Created
********************************************************************/
APIERR InitBrowsing( VOID )
{
static BOOL fLoadedCurrentDll = FALSE;
if ( !fLoadedCurrentDll )
{
HANDLE handle = ::LoadLibraryEx( THIS_DLL_NAME,
NULL,
LOAD_WITH_ALTERED_SEARCH_PATH );
if ( handle == NULL )
return ::GetLastError();
fLoadedCurrentDll = TRUE;
}
return NERR_Success;
}
/*******************************************************************
NAME: MPRUI_WNetDisconnectDialog
SYNOPSIS: Private API for the file manager disconnect dialog
ENTRY: hwnd - Parent window handle suitable for hosting a dialog
dwType - one of RESOURCETYPE_DISK or RESOURCETYPE_PRINT
lpHelpFile - helpfile to use on Help Button
nHelpContext - to pass to WinHelp on Help button
EXIT:
RETURNS:
NOTES:
HISTORY:
Johnl 22-Jan-1992 Commented, fixed
beng 31-Mar-1992 Unicode mumble
********************************************************************/
DWORD
MPRUI_WNetDisconnectDialog(
HWND hwnd,
DWORD dwType
)
{
AUTO_CURSOR cursHourGlass ;
DEVICE_TYPE devType ;
switch ( dwType )
{
case RESOURCETYPE_DISK:
devType = DEV_TYPE_DISK ;
break ;
// Allow Disk only
case RESOURCETYPE_PRINT:
default:
return WN_BAD_VALUE ;
}
//
// Call into netplwiz for the real dialog
//
return SHDisconnectNetDrives(hwnd);
}
/*******************************************************************
NAME: WNetBrowsePrinterDialog
SYNOPSIS:
ENTRY: hwnd - Parent window handle suitable for hosting a dialog
lpszName - place to store the name chosen
nNameLength - number of characters in the buffer lpszName
lpszHelpFile - helpfile to use on Help Button
nHelpContext - to pass to WinHelp on Help button
pfuncValidation - callback function to validate the name chosen
by the user
EXIT:
RETURNS:
NOTES:
HISTORY:
Yi-HsinS 12-Nov-1992 Created
********************************************************************/
DWORD WNetBrowsePrinterDialog( HWND hwnd,
WCHAR *lpszName,
DWORD nNameLength,
WCHAR *lpszHelpFile,
DWORD nHelpContext,
PFUNC_VALIDATION_CALLBACK pfuncValidation )
{
return WNetBrowseDialog( hwnd,
RESOURCETYPE_PRINT,
lpszName,
nNameLength,
lpszHelpFile,
nHelpContext,
pfuncValidation );
}
/*******************************************************************
NAME: WNetBrowseDialog
SYNOPSIS:
ENTRY: hwnd - Parent window handle suitable for hosting a dialog
dwType - one of RESOURCETYPE_DISK or RESOURCETYPE_PRINT
lpszName - place to store the name chosen
nNameLength - number of characters in the buffer lpszName
lpszHelpFile - helpfile to use on Help Button
nHelpContext - to pass to WinHelp on Help button
pfuncValidation - callback function to validate the name chosen
by the user
EXIT:
RETURNS:
NOTES:
HISTORY:
Yi-HsinS 12-Nov-1992 Created
********************************************************************/
DWORD WNetBrowseDialog( HWND hwnd,
DWORD dwType,
WCHAR *lpszName,
DWORD nNameLength,
WCHAR *lpszHelpFile,
DWORD nHelpContext,
PFUNC_VALIDATION_CALLBACK pfuncValidation )
{
if ( lpszName == NULL || lpszHelpFile == NULL || nNameLength <= 0 )
return WN_BAD_VALUE;
*lpszName = 0;
*(lpszName + (nNameLength - 1)) = 0;
AUTO_CURSOR cursHourGlass ;
DEVICE_TYPE devType ;
switch ( dwType )
{
case RESOURCETYPE_DISK:
devType = DEV_TYPE_DISK;
break ;
case RESOURCETYPE_PRINT:
devType = DEV_TYPE_PRINT;
break;
default:
return WN_BAD_VALUE ;
}
NLS_STR nlsName;
APIERR err = nlsName.QueryError();
if ( err != NERR_Success )
return err;
err = InitBrowsing();
if ( err != NERR_Success )
return err;
MPR_BROWSE_DIALOG * pbrowsedlg = new MPR_BROWSE_DIALOG( hwnd,
devType,
lpszHelpFile,
nHelpContext,
&nlsName,
pfuncValidation ) ;
BOOL fOK ;
err = (pbrowsedlg==NULL) ? WN_OUT_OF_MEMORY : pbrowsedlg->Process( &fOK ) ;
if ( err )
{
DBGEOL( "WNetBrowseDialog - Error code "
<< (ULONG) err << " returned from process." ) ;
switch ( err )
{
case WN_EXTENDED_ERROR:
MsgExtendedError( hwnd ) ;
break ;
default:
MsgPopup( hwnd, (MSGID) err ) ;
break ;
}
}
delete pbrowsedlg;
if ( nlsName.QueryTextLength() + 1 > nNameLength )
err = ERROR_INSUFFICIENT_BUFFER;
else
::strcpyf( lpszName, nlsName );
return err ? err : ( !fOK ? 0xffffffff : WN_SUCCESS );
}
#define DEFAULT_NETWORK_HELP_FILE SZ("network.hlp")
BOOL DummyIsValidFunction (LPWSTR psz) ;
/*******************************************************************
NAME: BrowseDialogA0
SYNOPSIS: a special browse dialog for WFW to thunk to
ENTRY:
EXIT:
RETURNS:
NOTES:
HISTORY:
chuckc 26-Mar-1993 created
********************************************************************/
DWORD BrowseDialogA0( HWND hwnd,
DWORD nType,
CHAR *pszName,
DWORD cchBufSize)
{
APIERR err ;
NLS_STR nlsPath ;
TCHAR szPath[MAX_PATH] ;
::memsetf(pszName,0,cchBufSize) ;
if ( (err = nlsPath.QueryError()) != NERR_Success)
return err ;
err = WNetBrowseDialog( hwnd,
nType,
szPath,
MAX_PATH,
DEFAULT_NETWORK_HELP_FILE,
HC_GENHELP_BROWSE,
DummyIsValidFunction ) ;
if (err)
return err ;
//
// make use of NLS_STR's handy U to A conversion rotines
//
err = nlsPath.CopyFrom(szPath) ;
if (!err)
err = nlsPath.MapCopyTo(pszName,cchBufSize) ;
return err ;
}
/*******************************************************************
NAME: DummyIsValidFunction
SYNOPSIS: no validation for WFW, always return TRUE
ENTRY:
EXIT:
RETURNS:
NOTES:
HISTORY:
chuckc 26-Mar-1993 created
********************************************************************/
BOOL DummyIsValidFunction (LPWSTR psz)
{
UNREFERENCED(psz) ;
return TRUE ;
}