다음을 통해 공유


회전자

회전자는 증분 단추, 감소 단추 및 편집 컨트롤로 구성된 복합 컨트롤로, 모두 애플리케이션에 10진수 값을 제공하는 데 사용됩니다.

세부 정보

다음 스크린샷은 리본 스피너를 보여 줍니다.

windows live moviemaker 리본에서 회전자 컨트롤의 스크린샷을 .

회전자 속성

Ribbon 프레임워크는 회전자 컨트롤에 속성 키 컬렉션을 정의합니다.

일반적으로 회전자 속성은 IUIFramework::InvalidateUICommand 메서드에 대한 호출을 통해 컨트롤과 연결된 명령을 무효화하여 리본 UI에서 업데이트됩니다. iUICommandHandler::UpdateProperty콜백 메서드를무효화 이벤트가 처리되고 속성 업데이트가 정의됩니다.

IUICommandHandler::UpdateProperty 콜백 메서드는 실행되지 않으며 애플리케이션은 프레임워크에서 속성이 필요할 때까지 업데이트된 속성 값을 쿼리합니다. 예를 들어 탭이 활성화되고 리본 UI에 컨트롤이 표시되거나 도구 설명이 표시되는 경우입니다.

메모

경우에 따라 IUIFramework::GetUICommandProperty 메서드를 통해 속성을 검색하고 IUIFramework::SetUICommandProperty 메서드로 설정할 수 있습니다.

다음 표에서는 회전자 컨트롤과 연결된 속성 키를 나열합니다.

속성 키 노트
UI_PKEY_DecimalPlaces 무효화를 통해서만 업데이트할 수 있습니다.
UI_PKEY_DecimalValue IUIFramework::GetUICommandPropertyIUIFramework::SetUICommandProperty지원합니다. 참고:IUIFramework::InvalidateUICommand호출을 통해 컨트롤과 연결된 명령이 무효화되면 프레임워크는 UI_INVALIDATIONS_VALUE플래그 값으로 전달될 때 이 속성을 쿼리합니다.
UI_PKEY_Enabled IUIFramework::GetUICommandPropertyIUIFramework::SetUICommandProperty지원합니다.
UI_PKEY_FormatString 무효화를 통해서만 업데이트할 수 있습니다.
UI_PKEY_Increment 무효화를 통해서만 업데이트할 수 있습니다.
UI_PKEY_Keytip 무효화를 통해서만 업데이트할 수 있습니다.
UI_PKEY_Label 무효화를 통해서만 업데이트할 수 있습니다.
UI_PKEY_LargeHighContrastImage 무효화를 통해서만 업데이트할 수 있습니다.
UI_PKEY_LargeImage 무효화를 통해서만 업데이트할 수 있습니다.
UI_PKEY_MaxValue 무효화를 통해서만 업데이트할 수 있습니다.
UI_PKEY_MinValue 무효화를 통해서만 업데이트할 수 있습니다.
UI_PKEY_RepresentativeString 무효화를 통해서만 업데이트할 수 있습니다.
UI_PKEY_SmallHighContrastImage 무효화를 통해서만 업데이트할 수 있습니다.
UI_PKEY_SmallImage 무효화를 통해서만 업데이트할 수 있습니다.
UI_PKEY_TooltipDescription 무효화를 통해서만 업데이트할 수 있습니다.
UI_PKEY_TooltipTitle 무효화를 통해서만 업데이트할 수 있습니다.

다음 코드 섹션에서는 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;
}

발언

회전자의 최소 값(UI_PKEY_MinValue)이 0.0으로 초기화되면 애플리케이션은 컨트롤에서 제공하는 후속 값이 -0.0(음수 0)이 아닌지 확인해야 합니다. 회전자가 -0.0 값을 제공하는 경우 애플리케이션은 다음 예제에서와 같이 IUIFramework::SetUICommandProperty 메서드를 사용하여 이 값을 0.0(양수 0)으로 다시 설정해야 합니다. 스피너 컨트롤에 대한 IUICommandHandler::Execute 메서드의 다음 예제와 같습니다.

메모

이 테스트를 수행하지 않고 값이 수정되지 않은 상태로 두면 컨트롤의 편집 필드에 "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;
}

Windows 리본 프레임워크 컨트롤 라이브러리

회전자 태그 요소