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.
 
 
 
 
 
 

265 lines
4.7 KiB

/*++
Copyright (C) Microsoft Corporation, 1995 - 1996
All rights reserved.
Module Name:
ctl.cxx
Abstract:
Dialog control code.
Author:
Albert Ting (AlbertT) 26-Aug-1995
Revision History:
Lazar Ivanov (LazarI) Oct-2000 - added vEnableControls
--*/
#include "precomp.hxx"
#pragma hdrstop
BOOL
bSetEditText(
HWND hDlg,
UINT uControl,
LPCTSTR pszString
)
{
SPLASSERT( hDlg );
SPLASSERT( uControl );
SendDlgItemMessage( hDlg,
uControl,
WM_SETTEXT,
0,
(LPARAM)(pszString ?
pszString :
gszNULL ));
return TRUE;
}
/*++
Routine Name:
bSetEditTextFormat
Routine Description:
Sets the text of an edit control using a printf style format
string. Note the format string and any following string
arguments must be TCHARS.
Arguments:
hDlg - handle to dialog which contains the edit control
uControl - edit control ID
pszString - pointer to printf style format string.
Arguments - variable number of arguments matching the format string
Return Value:
TRUE if format string was created and updated to control,
FALSE if error occured allocating format buffer or setting
control value.
--*/
BOOL
bSetEditTextFormat(
HWND hDlg,
UINT uControl,
LPCTSTR pszString,
...
)
{
SPLASSERT( hDlg );
SPLASSERT( uControl );
LPTSTR pszBuffer = new TCHAR [kMaxEditText];
if( !pszBuffer )
return FALSE;
va_list pArgs;
va_start( pArgs, pszString );
StringCchVPrintf( pszBuffer, kMaxEditText, pszString, pArgs );
bSetEditText( hDlg, uControl, pszBuffer );
delete [] pszBuffer;
va_end( pArgs );
return TRUE;
}
BOOL
bGetEditText(
IN HWND hDlg,
IN UINT uControl,
OUT TString& strDest
)
/*++
Routine Description:
Retrieves the edit text from a control. If the edit control is
empty, the string holds szNULL.
Arguments:
hDlg - Dlg that owns the control.
uControl - Control ID.
strDest - TString to receive string.
Return Value:
TRUE = success, FALSE = fail.
--*/
{
TCHAR szString[kStrMax*2];
szString[0] = 0;
SendDlgItemMessage( hDlg,
uControl,
WM_GETTEXT,
COUNTOF( szString ),
(LPARAM)szString );
return strDest.bUpdate( szString );
}
VOID
vEnableCtl(
HWND hDlg,
UINT uControl,
BOOL bEnable
)
{
EnableWindow( GetDlgItem( hDlg, uControl ), bEnable );
}
VOID
vSetCheck(
HWND hDlg,
UINT uControl,
BOOL bSet
)
/*++
Routine Description:
Sets a checkbox control on or off.
Arguments:
hDlg - Owning dialog control.
uControl - Checkbox to modify.
bSet - 0 indicates uncheck, non-zero indicates check. (Note this
is not a strict BOOL, _any_ non-zero value is TRUE.)
Return Value:
None
--*/
{
CheckDlgButton( hDlg,
uControl,
bSet ? BST_CHECKED : BST_UNCHECKED );
}
BOOL
bGetCheck(
IN HWND hDlg,
IN UINT uControl
)
{
return IsDlgButtonChecked( hDlg, uControl );
}
VOID
vEnableControls(
IN HWND hDlg,
IN BOOL bEnable,
IN UINT arrIDs[],
IN UINT uCount
)
{
HWND hwnd = NULL;
for( UINT u = 0; u < uCount; u++ )
{
hwnd = GetDlgItem(hDlg, arrIDs[u]);
if( hwnd )
{
EnableWindow(hwnd, bEnable);
}
}
}
//
// Safe helpers
//
HRESULT
LBGetTextHelper(
IN HWND hwndListBox,
IN int nItem,
OUT LPWSTR *ppszBuffer
)
{
HRESULT hr = S_OK;
CAutoHandleHLOCAL spText;
DWORD cchItem;
if (SUCCEEDED(hr))
{
hr = (hwndListBox && ppszBuffer) ? S_OK : E_INVALIDARG;
}
if (SUCCEEDED(hr))
{
cchItem = ListBox_GetTextLen(hwndListBox, nItem);
hr = (LB_ERR != cchItem) ? S_OK : E_UNEXPECTED;
}
if (SUCCEEDED(hr))
{
spText = LocalAlloc(LPTR, sizeof(WCHAR) * (cchItem + 1));
hr = spText ? S_OK : E_OUTOFMEMORY;
}
if (SUCCEEDED(hr))
{
hr = (LB_ERR != ListBox_GetText(hwndListBox, nItem, spText.GetPtrAs<LPWSTR>())) ? S_OK : E_UNEXPECTED;
}
if (SUCCEEDED(hr))
{
*ppszBuffer = spText.GetPtrAs<LPWSTR>();
spText.Detach();
hr = S_OK;
}
return hr;
}