250 lines
7.1 KiB
C++
250 lines
7.1 KiB
C++
/*******************************************************************************
|
|
*
|
|
* (C) COPYRIGHT MICROSOFT CORPORATION, 1998
|
|
*
|
|
* TITLE: SLIDEDIT.H
|
|
*
|
|
* VERSION: 1.0
|
|
*
|
|
* AUTHOR: ShaunIv
|
|
*
|
|
* DATE: 1/10/2000
|
|
*
|
|
* DESCRIPTION: Encapsulate the slider and edit and preview control interaction
|
|
*
|
|
*******************************************************************************/
|
|
|
|
#ifndef __SLIDEDIT_H_INCLUDED
|
|
#define __SLIDEDIT_H_INCLUDED
|
|
|
|
#include <windows.h>
|
|
#include "vwiaset.h"
|
|
|
|
class CSliderAndEdit
|
|
{
|
|
private:
|
|
HWND m_hWndSlider;
|
|
HWND m_hWndEdit;
|
|
HWND m_hWndPreview;
|
|
UINT m_nPreviewMessage;
|
|
CValidWiaSettings *m_pValidWiaSettings;
|
|
|
|
public:
|
|
CSliderAndEdit(void)
|
|
: m_hWndSlider(NULL),
|
|
m_hWndEdit(NULL),
|
|
m_hWndPreview(NULL),
|
|
m_nPreviewMessage(0),
|
|
m_pValidWiaSettings(NULL)
|
|
{
|
|
}
|
|
bool Initialize( HWND hWndSlider, HWND hWndEdit, HWND hWndPreview, UINT nPreviewMessage, CValidWiaSettings *pValidWiaSettings )
|
|
{
|
|
//
|
|
// Save all of these settings
|
|
//
|
|
m_hWndSlider = hWndSlider;
|
|
m_hWndEdit = hWndEdit;
|
|
m_hWndPreview = hWndPreview;
|
|
m_pValidWiaSettings = pValidWiaSettings;
|
|
m_nPreviewMessage = nPreviewMessage;
|
|
|
|
//
|
|
// Make sure these are valid
|
|
//
|
|
if (m_hWndSlider && m_hWndEdit && m_pValidWiaSettings)
|
|
{
|
|
//
|
|
// Set up the slider
|
|
//
|
|
SendMessage( m_hWndSlider, TBM_SETRANGE, TRUE, MAKELONG( 0, m_pValidWiaSettings->GetItemCount()-1 ) );
|
|
|
|
//
|
|
// Set the control's values
|
|
//
|
|
SetValue( m_pValidWiaSettings->InitialValue() );
|
|
|
|
//
|
|
// Everything is OK
|
|
//
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
void SetValue( LONG nValue )
|
|
{
|
|
if (IsValid())
|
|
{
|
|
//
|
|
// Get the index of the intial value and set the position of the slider
|
|
//
|
|
int nIndex = m_pValidWiaSettings->FindIndexOfItem( nValue );
|
|
if (nIndex >= 0)
|
|
{
|
|
SendMessage( m_hWndSlider, TBM_SETPOS, TRUE, nIndex );
|
|
}
|
|
|
|
//
|
|
// Set up the preview control
|
|
//
|
|
if (m_hWndPreview && m_nPreviewMessage)
|
|
{
|
|
SendMessage( m_hWndPreview, m_nPreviewMessage, 0, ConvertToPreviewRange(nValue) );
|
|
}
|
|
|
|
//
|
|
// Set up the edit control
|
|
//
|
|
SetDlgItemInt( GetParent(m_hWndEdit), GetWindowLong(m_hWndEdit,GWL_ID), nValue, TRUE );
|
|
}
|
|
}
|
|
void Restore(void)
|
|
{
|
|
if (IsValid())
|
|
{
|
|
SetValue( m_pValidWiaSettings->InitialValue() );
|
|
}
|
|
}
|
|
bool ValidateEditControl(void)
|
|
{
|
|
BOOL bSuccess = FALSE;
|
|
if (IsValid())
|
|
{
|
|
//
|
|
// Get the current value
|
|
//
|
|
LONG nValue = static_cast<LONG>(GetDlgItemInt( GetParent(m_hWndEdit), GetWindowLong(m_hWndEdit,GWL_ID), &bSuccess, TRUE ));
|
|
if (bSuccess)
|
|
{
|
|
//
|
|
// Assume it isn't a valid value
|
|
//
|
|
bSuccess = FALSE;
|
|
|
|
//
|
|
// Check to see if the edit control has a legal value in it
|
|
//
|
|
LONG nTestValue = nValue;
|
|
if (m_pValidWiaSettings->FindClosestValue(nTestValue))
|
|
{
|
|
if (nValue == nTestValue)
|
|
{
|
|
bSuccess = TRUE;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return (bSuccess != FALSE);
|
|
}
|
|
bool IsValid(void) const
|
|
{
|
|
return (m_hWndSlider && m_hWndEdit && m_pValidWiaSettings);
|
|
}
|
|
LONG ConvertToPreviewRange(LONG nValue) const
|
|
{
|
|
if (IsValid())
|
|
{
|
|
//
|
|
// Convert the value to the range 0...100
|
|
//
|
|
nValue = ((nValue-m_pValidWiaSettings->Min()) * 100) / (m_pValidWiaSettings->Max() - m_pValidWiaSettings->Min());
|
|
}
|
|
return nValue;
|
|
}
|
|
void HandleSliderUpdate(void)
|
|
{
|
|
WIA_PUSH_FUNCTION((TEXT("CSliderAndEdit::HandleSliderUpdate")));
|
|
if (IsValid())
|
|
{
|
|
//
|
|
// Find out what the current index is
|
|
//
|
|
int nIndex = static_cast<int>(SendMessage( m_hWndSlider, TBM_GETPOS, 0, 0 ));
|
|
WIA_TRACE((TEXT("nIndex = %d"), nIndex ));
|
|
|
|
|
|
//
|
|
// Get the value at that index, if it is valid set the edit control's text
|
|
//
|
|
LONG nValue;
|
|
if (m_pValidWiaSettings->GetItemAtIndex(nIndex,nValue))
|
|
{
|
|
WIA_TRACE((TEXT("nValue = %d"), nValue ));
|
|
SetDlgItemInt( GetParent(m_hWndEdit), GetWindowLong(m_hWndEdit,GWL_ID), nValue, TRUE );
|
|
}
|
|
|
|
//
|
|
// If the preview window is valid, send it a message
|
|
//
|
|
if (m_nPreviewMessage && m_hWndPreview)
|
|
{
|
|
SendMessage( m_hWndPreview, m_nPreviewMessage, 0, ConvertToPreviewRange(nValue) );
|
|
}
|
|
}
|
|
}
|
|
|
|
LONG GetValueFromCurrentPos(void)
|
|
{
|
|
WIA_PUSH_FUNCTION((TEXT("CSliderAndEdit::GetValueFromCurrentPos")));
|
|
if (IsValid())
|
|
{
|
|
//
|
|
// Find out what the current index is
|
|
//
|
|
int nIndex = static_cast<int>(SendMessage( m_hWndSlider, TBM_GETPOS, 0, 0 ));
|
|
WIA_TRACE((TEXT("nIndex = %d"), nIndex ));
|
|
|
|
|
|
//
|
|
// Get the value at that index, if it is valid return it
|
|
//
|
|
LONG nValue;
|
|
if (m_pValidWiaSettings->GetItemAtIndex(nIndex,nValue))
|
|
{
|
|
return nValue;
|
|
}
|
|
|
|
return m_pValidWiaSettings->Min();
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
void HandleEditUpdate(void)
|
|
{
|
|
WIA_PUSH_FUNCTION((TEXT("CSliderAndEdit::HandleSliderUpdate")));
|
|
if (IsValid())
|
|
{
|
|
//
|
|
// Get the current value
|
|
//
|
|
BOOL bSuccess = FALSE;
|
|
LONG nValue = static_cast<LONG>(GetDlgItemInt( GetParent(m_hWndEdit), GetWindowLong(m_hWndEdit,GWL_ID), &bSuccess, TRUE ));
|
|
if (bSuccess)
|
|
{
|
|
//
|
|
// Round it and send it to the slider control
|
|
//
|
|
if (m_pValidWiaSettings->FindClosestValue(nValue))
|
|
{
|
|
int nIndex = m_pValidWiaSettings->FindIndexOfItem( nValue );
|
|
if (nIndex >= 0)
|
|
{
|
|
SendMessage( m_hWndSlider, TBM_SETPOS, TRUE, nIndex );
|
|
}
|
|
|
|
//
|
|
// If the preview window is valid, send it a message
|
|
//
|
|
if (m_nPreviewMessage && m_hWndPreview)
|
|
{
|
|
SendMessage( m_hWndPreview, m_nPreviewMessage, 0, ConvertToPreviewRange(nValue) );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
#endif //__SLIDEDIT_H_INCLUDED
|
|
|