Spinner
Spinner är en sammansatt kontroll som består av en inkrementsknapp, en minskningsknapp och en redigeringskontroll, som alla används för att tillhandahålla decimalvärden till programmet.
Detaljer
Följande skärmbild illustrerar Bandsnurraren.
Egenskaper för spinnare
Menyfliksområdet definierar en samling egenskapsnycklar för Spinner-kontrollen.
Vanligtvis uppdateras en Spinner-egenskap i menyfliksområdets användargränssnitt genom att kommandot som är associerat med kontrollen ogiltigförklaras via ett anrop till metoden IUIFramework::InvalidateUICommand. Ogiltighetshändelsen hanteras och egenskapsuppdateringarna definieras av IUICommandHandler::UpdateProperty återanropsmetod.
Metoden IUICommandHandler::UpdateProperty motringning körs inte och programmet efterfrågade ett uppdaterat egenskapsvärde tills egenskapen krävs av ramverket. Till exempel när en flik aktiveras och en kontroll visas i menyfliksområdets användargränssnitt, eller när en knappbeskrivning visas.
Not
I vissa fall kan en egenskap hämtas via metoden IUIFramework::GetUICommandProperty och anges med metoden IUIFramework::SetUICommandProperty.
I följande tabell visas de egenskapsnycklar som är associerade med Spinner-kontrollen.
Egenskapsnyckel | Anteckningar |
---|---|
UI_PKEY_DecimalPlaces | Kan bara uppdateras genom ogiltighet. |
UI_PKEY_DecimalValue | Stöder IUIFramework::GetUICommandProperty och IUIFramework::SetUICommandProperty.
Obs! Om kommandot som är associerat med kontrollen är ogiltigt via ett anrop till IUIFramework::InvalidateUICommandfrågar ramverket den här egenskapen när UI_INVALIDATIONS_VALUE skickas som värdet för flaggor. |
UI_PKEY_Enabled | Stöder IUIFramework::GetUICommandProperty och IUIFramework::SetUICommandProperty. |
UI_PKEY_FormatString | Kan bara uppdateras genom ogiltighet. |
UI_PKEY_Increment | Kan bara uppdateras genom ogiltighet. |
UI_PKEY_Keytip | Kan bara uppdateras genom ogiltighet. |
UI_PKEY_Label | Kan bara uppdateras genom ogiltighet. |
UI_PKEY_LargeHighContrastImage | Kan bara uppdateras genom ogiltighet. |
UI_PKEY_LargeImage | Kan bara uppdateras genom ogiltighet. |
UI_PKEY_MaxValue | Kan bara uppdateras genom ogiltighet. |
UI_PKEY_MinValue | Kan bara uppdateras genom ogiltighet. |
UI_PKEY_RepresentativeString | Kan bara uppdateras genom ogiltighet. |
UI_PKEY_SmallHighContrastImage | Kan bara uppdateras genom ogiltighet. |
UI_PKEY_SmallImage | Kan bara uppdateras genom ogiltighet. |
UI_PKEY_TooltipDescription | Kan bara uppdateras genom ogiltighet. |
UI_PKEY_TooltipTitle | Kan bara uppdateras genom ogiltighet. |
Följande kodavsnitt visar hur olika egenskaper för Spinner-kontrollen uppdateras i metoden IUICommandHandler::UpdateProperty.
//
// FUNCTION: UpdateProperty()
//
// PURPOSE: Called by the Ribbon framework when a command property needs
// to be updated.
//
// COMMENTS: This function is used to provide new command property values for
// the spinner when requested by the Ribbon framework.
//
STDMETHODIMP CCommandHandler::UpdateProperty(
UINT nCmdID,
REFPROPERTYKEY key,
const PROPVARIANT* ppropvarCurrentValue,
PROPVARIANT* ppropvarNewValue)
{
UNREFERENCED_PARAMETER(ppropvarCurrentValue);
HRESULT hr = E_NOTIMPL;
if (nCmdID == IDR_CMD_SPINNER_RESIZE)
{
// Set the minimum value
if (IsEqualPropertyKey(key, UI_PKEY_MinValue))
{
ZeroMemory(ppropvarNewValue, sizeof(*ppropvarNewValue));
ppropvarNewValue->vt = VT_DECIMAL;
VarDecFromR8(-10.0, &ppropvarNewValue->decVal);
hr = S_OK;
}
// Set the maximum value
else if (IsEqualPropertyKey(key, UI_PKEY_MaxValue))
{
ZeroMemory(ppropvarNewValue, sizeof(*ppropvarNewValue));
ppropvarNewValue->vt = VT_DECIMAL;
VarDecFromR8(10.0, &ppropvarNewValue->decVal);
hr = S_OK;
}
// Set the increment
else if (IsEqualPropertyKey(key, UI_PKEY_Increment))
{
ZeroMemory(ppropvarNewValue, sizeof(*ppropvarNewValue));
ppropvarNewValue->vt = VT_DECIMAL;
VarDecFromR8(2.0, &ppropvarNewValue->decVal);
hr = S_OK;
}
// Set the number of decimal places
else if (IsEqualPropertyKey(key, UI_PKEY_DecimalPlaces))
{
hr = InitPropVariantFromUInt32(1, ppropvarNewValue);
hr = S_OK;
}
// Set the format string
else if (IsEqualPropertyKey(key, UI_PKEY_FormatString))
{
hr = InitPropVariantFromString(L"px", ppropvarNewValue);
hr = S_OK;
}
// Set the representative string
else if (IsEqualPropertyKey(key, UI_PKEY_RepresentativeString))
{
hr = InitPropVariantFromString(L"AAAAAAA", ppropvarNewValue);
hr = S_OK;
}
}
return hr;
}
Anmärkningar
Om minimivärdet (UI_PKEY_MinValue) för en spinnare initieras till 0,0, bör programmet se till att alla efterföljande värden som tillhandahålls av kontrollen inte är lika med -0,0 (negativ noll). Om Spinner tillhandahåller värdet -0.0 bör programmet återställa det här värdet till 0,0 (positiv nolla) med hjälp av metoden IUIFramework::SetUICommandProperty som du ser i följande exempel på en IUICommandHandler::Kör metod för en Spinner-kontroll.
Not
Om det här testet inte utförs och värdet lämnas okorrigerat visar redigeringsfältet i kontrollen strängen "Auto".
//
// FUNCTION: Execute()
//
// PURPOSE: Called by the Ribbon framework when a command is executed by the user.
// For this sample, when an increment or decrement button is pressed or
// a new value is entered in the Spinner edit field.
//
STDMETHODIMP CCommandHandler::Execute(
UINT nCmdID,
UI_EXECUTIONVERB verb,
const PROPERTYKEY* key,
const PROPVARIANT* ppropvarValue,
IUISimplePropertySet* pCommandExecutionProperties)
{
UNREFERENCED_PARAMETER(pCommandExecutionProperties);
HRESULT hr = E_NOTIMPL;
if (verb == UI_EXECUTIONVERB_EXECUTE)
{
RenderParam param;
g_renderer.GetRenderParam(¶m);
if (nCmdID == IDR_CMD_SPINNER_RESIZE)
{
// Spinner value is negative.
if (!(ppropvarValue->decVal.sign == 0))
{
// Check if the value supplied by the Spinner is -0
// and correct the value if necessary.
// If this value is left uncorrected, the edit field
// of the control will display the string "Auto" when
// UI_PKEY_MinValue is set to 0.
if (ppropvarValue->decVal.Lo64 == 0)
{
// Initialize a new PROPVARIANT structure.
PROPVARIANT m_varNewVal;
PropVariantInit(&m_varNewVal);
// The replacement DECIMAL value.
DECIMAL m_dVal;
hr = VarDecFromI4(0, &m_dVal);
if (FAILED(hr))
{
return hr;
}
// Initialize the new DECIMAL value.
UIInitPropertyFromDecimal(UI_PKEY_DecimalValue, m_dVal, &m_varNewVal);
// Set the UI_PKEY_DecimalValue to the new DECIMAL value.
hr = g_pFramework->SetUICommandProperty(nCmdID, UI_PKEY_DecimalValue, m_varNewVal);
if (FAILED(hr))
{
return hr;
}
}
// Decrease size of shape in document space.
param.iShapeSizeIncrement = -ppropvarValue->intVal;
}
// Spinner value is positive.
else
{
// Increase size of shape in document space.
param.iShapeSizeIncrement = ppropvarValue->intVal;
}
}
g_renderer.UpdateRenderParam(param);
}
return hr;
}