Spinner

Spinner adalah kontrol komposit yang terdiri dari tombol kenaikan, tombol penurunan, dan kontrol edit, yang semuanya digunakan untuk memberikan nilai desimal ke aplikasi.

Detail

Cuplikan layar berikut mengilustrasikan Pemintal Pita.

screen shot of a spinner control in the windows live moviemaker ribbon.

Properti Spinner

Kerangka kerja Pita menentukan kumpulan kunci properti untuk kontrol Spinner.

Biasanya, properti Spinner diperbarui di UI pita dengan membatalkan Perintah yang terkait dengan kontrol melalui panggilan ke metode IUIFramework::InvalidateUICommand . Peristiwa pembatalan ditangani, dan pembaruan properti ditentukan, oleh metode panggilan balik IUICommandHandler::UpdateProperty .

Metode panggilan balik IUICommandHandler::UpdateProperty tidak dijalankan, dan aplikasi meminta nilai properti yang diperbarui, hingga properti diperlukan oleh kerangka kerja. Misalnya, saat tab diaktifkan dan kontrol terungkap di UI pita, atau saat tipsalat ditampilkan.

Catatan

Dalam beberapa kasus, properti dapat diambil melalui metode IUIFramework::GetUICommandProperty dan diatur dengan metode IUIFramework::SetUICommandProperty .

Tabel berikut mencantumkan kunci properti yang terkait dengan kontrol Spinner.

Kunci Properti Catatan
UI_PKEY_DecimalPlaces Hanya dapat diperbarui melalui pembatalan.
UI_PKEY_DecimalValue Mendukung IUIFramework::GetUICommandProperty dan IUIFramework::SetUICommandProperty.
[! Catatan]
Jika Perintah yang terkait dengan kontrol tidak valid melalui panggilan ke IUIFramework::InvalidateUICommand, kerangka kerja meminta properti ini ketika UI_INVALIDATIONS_VALUE diteruskan sebagai nilai bendera.

UI_PKEY_Enabled Mendukung IUIFramework::GetUICommandProperty dan IUIFramework::SetUICommandProperty.
UI_PKEY_FormatString Hanya dapat diperbarui melalui pembatalan.
UI_PKEY_Increment Hanya dapat diperbarui melalui pembatalan.
UI_PKEY_Keytip Hanya dapat diperbarui melalui pembatalan.
UI_PKEY_Label Hanya dapat diperbarui melalui pembatalan.
UI_PKEY_LargeHighContrastImage Hanya dapat diperbarui melalui pembatalan.
UI_PKEY_LargeImage Hanya dapat diperbarui melalui pembatalan.
UI_PKEY_MaxValue Hanya dapat diperbarui melalui pembatalan.
UI_PKEY_MinValue Hanya dapat diperbarui melalui pembatalan.
UI_PKEY_RepresentativeString Hanya dapat diperbarui melalui pembatalan.
UI_PKEY_SmallHighContrastImage Hanya dapat diperbarui melalui pembatalan.
UI_PKEY_SmallImage Hanya dapat diperbarui melalui pembatalan.
UI_PKEY_TooltipDescription Hanya dapat diperbarui melalui pembatalan.
UI_PKEY_TooltipTitle Hanya dapat diperbarui melalui pembatalan.

Bagian kode berikut menunjukkan bagaimana berbagai properti kontrol Spinner diperbarui dalam metode 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;
}

Keterangan

Jika nilai minimum (UI_PKEY_MinValue) Spinner diinisialisasi menjadi 0,0, aplikasi harus memastikan bahwa nilai berikutnya yang disediakan oleh kontrol tidak sama dengan -0,0 (nol negatif). Jika Spinner memasok nilai -0.0, aplikasi harus mengatur ulang nilai ini ke 0,0 (nol positif) menggunakan metode IUIFramework::SetUICommandProperty seperti yang ditunjukkan dalam contoh berikut dari metode IUICommandHandler::Execute untuk kontrol Spinner.

Catatan

Jika pengujian ini tidak dilakukan dan nilai dibiarkan tidak salah, bidang edit kontrol menampilkan string "Otomatis".

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

Pustaka Kontrol Kerangka Kerja Pita Windows

Elemen markup spinner