mirror of https://github.com/tongzx/nt5src
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
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;
|
|
}
|