/*++ 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; }