Source code of Windows XP (NT5)
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.
 
 
 
 
 
 

374 lines
7.3 KiB

/*++
Copyright (c) 1992 Microsoft Corporation
Module Name:
Controls.c
Abstract:
This module contains support manipulating controls.
Author:
David J. Gilman (davegi) 11-Dec-1992
Environment:
User Mode
--*/
#include "wintools.h"
DWORD
DialogPrintf(
IN HWND hWnd,
IN int ControlId,
IN UINT FormatId,
IN ...
)
/*++
Routine Description:
Display a printf style string in the specified control of the
supplied dialog.
Arguments:
hWnd - Supplies handle to the dialog that contains the control.
ControlId - Supplies the id of the control where the formatted text
will be displayed.
FormatId - Supplies a resource id for a printf style format string.
... - Supplies zero or more values based on the format
descpritors supplied in Format.
Return Value:
None.
--*/
{
BOOL Success;
DWORD Count;
va_list Args;
DbgHandleAssert( hWnd );
//
// Retrieve the values and format the string.
//
va_start( Args, FormatId );
if( IsDlgItemUnicode( hWnd, ControlId )) {
WCHAR Buffer[ MAX_CHARS ];
Count = FormatMessageW(
FORMAT_MESSAGE_FROM_HMODULE,
NULL,
FormatId,
0,
Buffer,
sizeof( Buffer ),
&Args
);
DbgAssert( Count != 0 );
//
// Display the formatted text in the specified control.
//
Success = SetDlgItemTextW(
hWnd,
ControlId,
Buffer
);
DbgAssert( Success );
} else {
CHAR Buffer[ MAX_CHARS ];
Count = FormatMessageA(
FORMAT_MESSAGE_FROM_HMODULE,
NULL,
FormatId,
0,
Buffer,
sizeof( Buffer ),
&Args
);
DbgAssert( Count != 0 );
//
// Display the formatted text in the specified control.
//
Success = SetDlgItemTextA(
hWnd,
ControlId,
Buffer
);
DbgAssert( Success );
}
va_end( Args );
return Count;
}
BOOL
EnableControl(
IN HWND hWnd,
IN int ControlId,
IN BOOL Enable
)
/*++
Routine Description:
Enable or diable the specified control based on the supplied flag.
Arguments:
hWnd - Supplies the window (dialog box) handle that contains the
control.
ControlId - Supplies the control id.
Enable - Supplies a flag which if TRUE causes the control to be enabled
and disables the control if FALSE.
Return Value:
BOOL - Returns TRUE if the control is succesfully enabled / disabled.
--*/
{
HWND hWndControl;
BOOL Success;
DbgHandleAssert( hWnd );
hWndControl = GetDlgItem( hWnd, ControlId );
DbgHandleAssert( hWndControl );
if( hWndControl == NULL ) {
return FALSE;
}
if( Enable == IsWindowEnabled( hWndControl )) {
return TRUE;
}
Success = EnableWindow( hWndControl, Enable );
// if we are always returning true then there should not be any concern
// as to what value EnableWindow returns.
return TRUE; // EnableWindow is returning 8 for TRUE return Success == Enable;
}
BOOL
IsDlgItemUnicode(
IN HWND hWnd,
IN int ControlId
)
/*++
Routine Description:
Determines if the supplied dialog item is a Unicode control.
Arguments:
hWnd - Supplies the window (dialog box) handle that contains the
control.
ControlId - Supplies the control id.
Return Value:
BOOL - Returns TRUE if the control is Unicode, FALSE if ANSI.
--*/
{
HWND hWndControl;
DbgHandleAssert( hWnd );
//
// Get the handle for the supplied control so that it can be determined
// if it is ANSI or UNICODE.
//
hWndControl = GetDlgItem( hWnd, ControlId );
DbgHandleAssert( hWndControl );
return IsWindowUnicode( hWndControl );
}
BOOL
SetDlgItemBigInt(
IN HWND hWnd,
IN int ControlId,
IN UINT Value,
IN BOOL Signed
)
/*++
Routine Description:
Arguments:
hWnd - Supplies the window (dialog box) handle that contains the
control or the window handle where the font should be set.
ControlId - Supplies the control id or xero if the hWnd is a window
rather than a dialog handle.
Return Value:
BOOL -
--*/
{
BOOL Success;
if( IsDlgItemUnicode( hWnd, ControlId )) {
Success = SetDlgItemTextW(
hWnd,
ControlId,
FormatBigIntegerW(
Value,
Signed
)
);
DbgAssert( Success );
} else {
DbgAssert( FALSE );
}
return Success;
}
BOOL
SetDlgItemHex(
IN HWND hWnd,
IN int ControlId,
IN UINT Value
)
/*++
Routine Description:
Arguments:
hWnd - Supplies the window (dialog box) handle that contains the
control or the window handle where the font should be set.
ControlId - Supplies the control id or xero if the hWnd is a window
rather than a dialog handle.
Return Value:
BOOL -
--*/
{
BOOL Success;
DWORD Count;
if( IsDlgItemUnicode( hWnd, ControlId )) {
WCHAR Buffer[ MAX_PATH ];
Count = wsprintfW( Buffer, L"0x%08.8X", Value );
DbgAssert(( Count != 0 ) && ( Count < MAX_PATH ));
Success = SetDlgItemTextW( hWnd, ControlId, Buffer );
DbgAssert( Success );
} else {
CHAR Buffer[ MAX_PATH ];
Count = wsprintfA( Buffer, "0x%08.8X", Value );
DbgAssert(( Count != 0 ) && ( Count < MAX_PATH ));
Success = SetDlgItemTextA( hWnd, ControlId, Buffer );
DbgAssert( Success );
}
return Success;
}
BOOL
SetFixedPitchFont(
IN HWND hWnd,
IN int ControlId
)
/*++
Routine Description:
Set the font for the supplied control to the system's fixed pitch font. If
the ControlId parameter is 0, the font is set in the supplied hWnd.
Arguments:
hWnd - Supplies the window (dialog box) handle that contains the
control or the window handle where the font should be set.
ControlId - Supplies the control id or xero if the hWnd is a window
rather than a dialog handle.
Return Value:
BOOL - Returns TRUE if the font is succesfully set.
--*/
{
HFONT hFont;
hFont = GetStockObject( SYSTEM_FIXED_FONT );
DbgHandleAssert( hFont );
if( ControlId == 0 ) {
HDC hDC;
hDC = GetDC( hWnd );
DbgHandleAssert( hDC );
if( hDC == NULL ) {
return FALSE;
}
SelectObject( hDC, hFont );
} else {
SendDlgItemMessage(
hWnd,
ControlId,
WM_SETFONT,
( WPARAM ) hFont,
( LPARAM ) FALSE
);
}
return TRUE;
}