Dela via


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.

skärmdump av en spinnarkontroll i menyfliksområdet windows live moviemaker.

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(&param);

        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;
}

Kontrollbibliotek för Windows Ribbon Framework

Spinner-markeringselement