267 lines
8.5 KiB
C++
267 lines
8.5 KiB
C++
|
/**********************************************************************/
|
||
|
/** Microsoft Windows/NT **/
|
||
|
/** Copyright(c) Microsoft Corp., 1991 **/
|
||
|
/**********************************************************************/
|
||
|
|
||
|
/*
|
||
|
GETFOCUS.CXX
|
||
|
Popup a dialog box and ask for the domain or server name
|
||
|
|
||
|
FILE HISTORY:
|
||
|
terryk 18-Nov-1991 Created
|
||
|
terryk 26-Nov-1991 Code review changes. reviewed by jonn
|
||
|
johnl
|
||
|
Yi-HsinS31-Dec-1991 Unicode work - change strlen() to
|
||
|
QueryTextSize()
|
||
|
|
||
|
*/
|
||
|
|
||
|
#define INCL_WINDOWS_GDI
|
||
|
#define INCL_WINDOWS
|
||
|
#define INCL_DOSERRORS
|
||
|
#define INCL_NETCONS
|
||
|
#define INCL_NETERRORS
|
||
|
#define INCL_NETLIB
|
||
|
#define INCL_ICANON
|
||
|
#define INCL_NETSERVER
|
||
|
#include <lmui.hxx>
|
||
|
|
||
|
#if defined(DEBUG)
|
||
|
static const CHAR szFileName[] = __FILE__;
|
||
|
#define _FILENAME_DEFINED_ONCE szFileName
|
||
|
#endif
|
||
|
#include <uiassert.hxx>
|
||
|
|
||
|
#define INCL_BLT_DIALOG
|
||
|
#define INCL_BLT_CONTROL
|
||
|
#define INCL_BLT_MSGPOPUP
|
||
|
#define INCL_BLT_CLIENT
|
||
|
#define INCL_BLT_APP
|
||
|
#define INCL_BLT_TIMER
|
||
|
#include <blt.hxx>
|
||
|
#include <string.hxx>
|
||
|
#include <uitrace.hxx>
|
||
|
#include <focusdlg.hxx>
|
||
|
#include <wnetdev.hxx>
|
||
|
|
||
|
extern "C"
|
||
|
{
|
||
|
#include <uiexport.h>
|
||
|
#include <wnet16.h>
|
||
|
#include <uigenhlp.h>
|
||
|
}
|
||
|
|
||
|
#define THIS_DLL_NAME SZ("ntlanman.dll")
|
||
|
#define DEFAULT_NETWORK_HELP_FILE SZ("network.hlp")
|
||
|
|
||
|
|
||
|
/*******************************************************************
|
||
|
|
||
|
NAME: I_SystemFocusDialog
|
||
|
|
||
|
SYNOPSIS: Popup a dialog box and get the domain or server name
|
||
|
|
||
|
ENTRY: hwndOwner - owner window handle
|
||
|
nSelectionType - Determines what items the user can select
|
||
|
pszName - the string buffer which contains the
|
||
|
return value. It can be either domain name or server
|
||
|
name. ( server name will start with "\\" )
|
||
|
cchBuffSize - the max buf size of pszName
|
||
|
pfOK - TRUE if user hits OK button. FALSE if user
|
||
|
hits a CANCEL button.
|
||
|
|
||
|
EXIT: LPWSTR pszName - if user hits okay button, it will
|
||
|
return either a domain name or a server name. (
|
||
|
server name always starts with "\\" ). It will be
|
||
|
undefined if the user hits Cancel button.
|
||
|
BOOL *pfOK - TRUE if user hits ok button. FALSE
|
||
|
otherwise.
|
||
|
|
||
|
RETURNS: UINT - (APIERR) - NERR_Success if the operation is succeed.
|
||
|
NERR_BufTooSmall, the string buffer is too
|
||
|
small. It will not set the string if the
|
||
|
buffer is too small.
|
||
|
|
||
|
NOTES: The reason the return type is UINT and not APIERR is because
|
||
|
APIERR is not a public definition, and this API is exported
|
||
|
for public use.
|
||
|
|
||
|
HISTORY:
|
||
|
terryk 18-Nov-1991 Created
|
||
|
terryk 19-Nov-1991 Name changed
|
||
|
JohnL 22-Apr-1992 Allowed inclusion specification
|
||
|
|
||
|
********************************************************************/
|
||
|
|
||
|
UINT I_SystemFocusDialog( HWND hwndOwner,
|
||
|
UINT nSelectionType,
|
||
|
LPWSTR pszName,
|
||
|
UINT cchBuffSize,
|
||
|
BOOL * pfOK,
|
||
|
LPWSTR pszHelpFile,
|
||
|
DWORD nHelpContext )
|
||
|
{
|
||
|
static BOOL fLoadedCurrentDll = FALSE;
|
||
|
|
||
|
APIERR err ;
|
||
|
if ( err = InitShellUI() )
|
||
|
{
|
||
|
return err ;
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// Because select computer dialog has a second thread,
|
||
|
// we need to do a loadlibrary again to prevent
|
||
|
// the dll from unloading itself while the second thread
|
||
|
// is still active.
|
||
|
//
|
||
|
|
||
|
// JonN 01/28/00 PREFIX bug 444915
|
||
|
// Because STANDALONE_SET_FOCUS_DLG is liable to launch a second thread
|
||
|
// which will survive DIALOG::Process(), we increment the library
|
||
|
// refcount. We can't decrement it because we don't know when
|
||
|
// this thread will complete, so the library remains loaded
|
||
|
// for the life of the process.
|
||
|
//
|
||
|
// This is not an ideal solution. The thread should take care of
|
||
|
// its own refcounting needs. However, this is downlevel code
|
||
|
// used only by the oldest clients, and I don't feel comfortable
|
||
|
// making this kind of change which could cause unpredictable problems.
|
||
|
// I think the wisest course is to leave this alone, and continue to
|
||
|
// migrate clients towards Object Picker.
|
||
|
|
||
|
if ( !fLoadedCurrentDll )
|
||
|
{
|
||
|
HANDLE handle = ::LoadLibraryEx( THIS_DLL_NAME,
|
||
|
NULL,
|
||
|
LOAD_WITH_ALTERED_SEARCH_PATH );
|
||
|
if ( handle == NULL )
|
||
|
return ::GetLastError();
|
||
|
fLoadedCurrentDll = TRUE;
|
||
|
}
|
||
|
|
||
|
UINT nSel = nSelectionType & 0x0000FFFF;
|
||
|
ULONG maskDomainSources = nSelectionType >> 16;
|
||
|
if ( maskDomainSources == 0 )
|
||
|
maskDomainSources = BROWSE_LM2X_DOMAINS;
|
||
|
|
||
|
enum SELECTION_TYPE seltype ;
|
||
|
switch ( nSel )
|
||
|
{
|
||
|
case FOCUSDLG_DOMAINS_ONLY:
|
||
|
seltype = SEL_DOM_ONLY ;
|
||
|
break ;
|
||
|
|
||
|
case FOCUSDLG_SERVERS_ONLY:
|
||
|
seltype = SEL_SRV_ONLY ;
|
||
|
break ;
|
||
|
|
||
|
case FOCUSDLG_SERVERS_AND_DOMAINS:
|
||
|
seltype = SEL_SRV_AND_DOM ;
|
||
|
break ;
|
||
|
|
||
|
default:
|
||
|
return ERROR_INVALID_PARAMETER ;
|
||
|
}
|
||
|
|
||
|
// Create a standalone set focus dialog box and get the input
|
||
|
// form the user
|
||
|
NLS_STR nlsName;
|
||
|
STANDALONE_SET_FOCUS_DLG ssfdlg( hwndOwner,
|
||
|
&nlsName,
|
||
|
nHelpContext,
|
||
|
seltype,
|
||
|
maskDomainSources,
|
||
|
NULL,
|
||
|
pszHelpFile );
|
||
|
|
||
|
err = ssfdlg.Process( pfOK );
|
||
|
if ( err != NERR_Success )
|
||
|
{
|
||
|
::MsgPopup( hwndOwner, err );
|
||
|
*pfOK = FALSE;
|
||
|
return err;
|
||
|
}
|
||
|
if ( *pfOK == TRUE )
|
||
|
{
|
||
|
if (( nlsName.QueryTextLength() + 1 ) > cchBuffSize )
|
||
|
{
|
||
|
*pfOK = FALSE;
|
||
|
return NERR_BufTooSmall;
|
||
|
}
|
||
|
::strcpyf( pszName, nlsName.QueryPch() );
|
||
|
}
|
||
|
|
||
|
return NERR_Success;
|
||
|
} // GetSystemFocusDialog END
|
||
|
|
||
|
/*******************************************************************
|
||
|
|
||
|
NAME: ServerBrowseDialogA0
|
||
|
|
||
|
SYNOPSIS: dialog box to browse for servers
|
||
|
|
||
|
ENTRY: hwndOwner - owner window handle
|
||
|
pszName - the string buffer which contains the
|
||
|
return value. It can be either domain name or server
|
||
|
name. ( server name will start with "\\" )
|
||
|
cchBuffSize - the max buf size of pszName
|
||
|
|
||
|
EXIT: LPWSTR pszName - if user hits okay button, it will
|
||
|
return either a domain name or a server name. (
|
||
|
server name always starts with "\\" ). It will be
|
||
|
undefined if the user hits Cancel button.
|
||
|
|
||
|
RETURNS: UINT - (APIERR) - NERR_Success if the operation is succeed.
|
||
|
WN_CANCEL - The user cancelled the dialog box.
|
||
|
NERR_BufTooSmall, the string buffer is too
|
||
|
small. It will not set the string if the
|
||
|
buffer is too small.
|
||
|
|
||
|
NOTES:
|
||
|
|
||
|
HISTORY:
|
||
|
ChuckC 28-Mar-1993 Created
|
||
|
AnirudhS 03-Oct-1995 Handle WN_CANCEL case
|
||
|
|
||
|
********************************************************************/
|
||
|
|
||
|
DWORD ServerBrowseDialogA0(HWND hwnd,
|
||
|
CHAR *pchBuffer,
|
||
|
DWORD cchBufSize)
|
||
|
{
|
||
|
NLS_STR nlsServer ;
|
||
|
TCHAR szServer[MAX_PATH] ;
|
||
|
BOOL fOK ;
|
||
|
UINT err ;
|
||
|
|
||
|
::memsetf(pchBuffer,0,cchBufSize) ;
|
||
|
|
||
|
if (err = (UINT) nlsServer.QueryError())
|
||
|
return err ;
|
||
|
|
||
|
err = I_SystemFocusDialog ( hwnd,
|
||
|
FOCUSDLG_SERVERS_ONLY,
|
||
|
szServer,
|
||
|
MAX_PATH,
|
||
|
&fOK,
|
||
|
DEFAULT_NETWORK_HELP_FILE,
|
||
|
HC_GENHELP_BROWSESERVERS ) ;
|
||
|
|
||
|
if (err == NERR_Success && !fOK)
|
||
|
{
|
||
|
err = WN_CANCEL;
|
||
|
}
|
||
|
|
||
|
if (err != NERR_Success)
|
||
|
return err ;
|
||
|
|
||
|
err = (UINT) nlsServer.CopyFrom(szServer) ;
|
||
|
if (err == NERR_Success)
|
||
|
{
|
||
|
err = (UINT) nlsServer.MapCopyTo(pchBuffer, cchBufSize) ;
|
||
|
}
|
||
|
|
||
|
return err ;
|
||
|
}
|