259 lines
6.1 KiB
C++
259 lines
6.1 KiB
C++
/*++
|
|
|
|
Copyright (c) 1995 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
nwshmisc.cxx
|
|
|
|
Abstract:
|
|
|
|
This module implements misc methods used in the shell extension classes.
|
|
|
|
Author:
|
|
|
|
Yi-Hsin Sung (yihsins) 25-Oct-1995
|
|
|
|
--*/
|
|
|
|
#include <windows.h>
|
|
#include <shellapi.h>
|
|
#include <shlobj.h>
|
|
#define DONT_WANT_SHELLDEBUG
|
|
#include <shlobjp.h>
|
|
|
|
#include "nwshcmn.h"
|
|
|
|
#define MAX_RESOURCE_STRING_LENGTH 256
|
|
|
|
VOID HideControl( HWND hwndDlg, WORD wID )
|
|
{
|
|
HWND hwndTmp = ::GetDlgItem( hwndDlg, wID );
|
|
::EnableWindow( hwndTmp, FALSE );
|
|
::ShowWindow( hwndTmp, FALSE );
|
|
}
|
|
|
|
VOID UnHideControl( HWND hwndDlg, WORD wID )
|
|
{
|
|
HWND hwndTmp = ::GetDlgItem( hwndDlg, wID );
|
|
::EnableWindow( hwndTmp, TRUE );
|
|
::ShowWindow( hwndTmp, TRUE );
|
|
}
|
|
|
|
VOID EnableDlgItem( HWND hwndDlg, WORD wID, BOOL fEnable)
|
|
{
|
|
HWND hwndTmp = ::GetDlgItem( hwndDlg, wID );
|
|
|
|
::EnableWindow( hwndTmp, fEnable);
|
|
}
|
|
|
|
/*
|
|
* LoadErrorPrintf
|
|
* -------------
|
|
*
|
|
* Uses normal printf style format string
|
|
*/
|
|
DWORD
|
|
LoadMsgErrorPrintf(
|
|
LPWSTR *ppszMessage,
|
|
UINT uiMsg,
|
|
DWORD errNum
|
|
)
|
|
{
|
|
DWORD nLen = 0;
|
|
DWORD err = NO_ERROR;
|
|
LPWSTR pszError = NULL;
|
|
WCHAR szError[20];
|
|
|
|
*ppszMessage = NULL;
|
|
|
|
//
|
|
// Try to get the error string associated with the given number
|
|
// from the system. If we cannot find the string, then
|
|
// just show the number.
|
|
//
|
|
|
|
nLen = ::FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM
|
|
| FORMAT_MESSAGE_IGNORE_INSERTS
|
|
| FORMAT_MESSAGE_ALLOCATE_BUFFER,
|
|
NULL, // ignored
|
|
errNum, // Message resource id
|
|
0, // Language id
|
|
(LPWSTR) &pszError,
|
|
// Return pointer to formatted text
|
|
256, // Min.length
|
|
NULL );
|
|
|
|
if ( nLen == 0 || pszError == NULL )
|
|
{
|
|
wsprintf( szError, L"%d", errNum );
|
|
}
|
|
|
|
err = LoadMsgPrintf( ppszMessage, uiMsg, pszError? pszError : szError );
|
|
|
|
if ( pszError )
|
|
::LocalFree( pszError );
|
|
|
|
return err;
|
|
}
|
|
|
|
/*
|
|
* LoadMsgPrintf
|
|
* -------------
|
|
*
|
|
* Uses normal printf style format string
|
|
*/
|
|
DWORD
|
|
LoadMsgPrintf(
|
|
LPWSTR *ppszMessage,
|
|
UINT uiMsg,
|
|
...
|
|
)
|
|
{
|
|
WCHAR szMessage[512];
|
|
DWORD err = NO_ERROR;
|
|
DWORD nLen = 0;
|
|
va_list start;
|
|
|
|
va_start( start, uiMsg );
|
|
|
|
*ppszMessage = NULL;
|
|
|
|
if ( ::LoadString( ::hmodNW, uiMsg, szMessage,
|
|
sizeof(szMessage)/sizeof(szMessage[0])))
|
|
{
|
|
nLen = ::FormatMessage( FORMAT_MESSAGE_FROM_STRING
|
|
| FORMAT_MESSAGE_ALLOCATE_BUFFER,
|
|
szMessage,
|
|
0, // Message resource id, ignored
|
|
0, // Language id
|
|
(LPWSTR) ppszMessage,
|
|
// Return pointer to formatted text
|
|
256, // Min.length
|
|
&start );
|
|
|
|
if ( nLen == 0 || *ppszMessage == NULL )
|
|
err = GetLastError();
|
|
|
|
}
|
|
|
|
va_end(start);
|
|
|
|
return err;
|
|
}
|
|
|
|
/*
|
|
* MsgBoxErrorPrintf
|
|
* ------------
|
|
*
|
|
* Message box routine
|
|
*
|
|
*/
|
|
DWORD
|
|
MsgBoxErrorPrintf(
|
|
HWND hwnd,
|
|
UINT uiMsg,
|
|
UINT uiTitle,
|
|
UINT uiFlags,
|
|
DWORD errNum,
|
|
LPWSTR pszInsertStr
|
|
)
|
|
{
|
|
DWORD nLen = 0;
|
|
DWORD err = NO_ERROR;
|
|
LPWSTR pszError = NULL;
|
|
WCHAR szError[20];
|
|
|
|
nLen = ::FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM
|
|
| FORMAT_MESSAGE_IGNORE_INSERTS
|
|
| FORMAT_MESSAGE_ALLOCATE_BUFFER,
|
|
NULL, // ignored
|
|
errNum, // Message resource id
|
|
0, // Language id
|
|
(LPWSTR) &pszError,
|
|
// Return pointer to formatted text
|
|
256, // Min.length
|
|
NULL );
|
|
|
|
if ( nLen == 0 || pszError == NULL )
|
|
wsprintf( szError, L"%d", errNum );
|
|
|
|
if ( pszInsertStr )
|
|
{
|
|
err = MsgBoxPrintf( hwnd, uiMsg, uiTitle, uiFlags,
|
|
pszError? pszError : szError, pszInsertStr );
|
|
}
|
|
else
|
|
{
|
|
err = MsgBoxPrintf( hwnd, uiMsg, uiTitle, uiFlags,
|
|
pszError? pszError : szError );
|
|
}
|
|
|
|
if ( pszError )
|
|
::LocalFree( pszError );
|
|
|
|
return err;
|
|
|
|
}
|
|
|
|
|
|
/*
|
|
* MsgBoxPrintf
|
|
* ------------
|
|
*
|
|
* Message box routine
|
|
*
|
|
*/
|
|
DWORD
|
|
MsgBoxPrintf(
|
|
HWND hwnd,
|
|
UINT uiMsg,
|
|
UINT uiTitle,
|
|
UINT uiFlags,
|
|
...
|
|
)
|
|
{
|
|
WCHAR szTitle[MAX_RESOURCE_STRING_LENGTH];
|
|
WCHAR szMessage[MAX_RESOURCE_STRING_LENGTH];
|
|
LPWSTR lpFormattedMessage = NULL;
|
|
DWORD err = NO_ERROR;
|
|
va_list start;
|
|
|
|
va_start(start,uiFlags);
|
|
|
|
if ( ::LoadString( ::hmodNW, uiMsg, szMessage, sizeof(szMessage)/sizeof(szMessage[0]))
|
|
&& ::LoadString( ::hmodNW, uiTitle, szTitle, sizeof(szTitle)/sizeof(szTitle[0]))
|
|
)
|
|
{
|
|
DWORD nLen = ::FormatMessage( FORMAT_MESSAGE_FROM_STRING
|
|
| FORMAT_MESSAGE_ALLOCATE_BUFFER,
|
|
szMessage,
|
|
0, // Resource Id, ignored
|
|
NULL, // Language Id, ignored
|
|
(LPWSTR) &lpFormattedMessage,
|
|
// Return pointer to formatted text
|
|
256, // Min.length
|
|
&start );
|
|
|
|
if ( nLen == 0 || lpFormattedMessage == NULL )
|
|
{
|
|
err = GetLastError();
|
|
goto CleanExit;
|
|
}
|
|
|
|
err = ::MessageBox( hwnd,
|
|
lpFormattedMessage,
|
|
szTitle,
|
|
uiFlags );
|
|
|
|
::LocalFree( lpFormattedMessage );
|
|
}
|
|
|
|
CleanExit:
|
|
|
|
va_end(start);
|
|
|
|
return err;
|
|
|
|
}
|