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
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;
|
|
}
|