2007 Office Fluent Ribbon을 사용자 지정 (개발자 대상) (3부)

소개 : 이 문서에는 Microsoft Office Fluent 사용자 인터페이스에 대해 자주 물어보는 질문이 포함됩니다.

Frank Rice, Microsoft Corporation

Ken Getz, MCW Technologies, LLC

발행 : 2006 년 5 월

업데이트 : 2008 년 5 월

적용 대상 : Microsoft Office Access 2007, Microsoft Office Excel 2007, Microsoft Office PowerPoint 2007, Microsoft Office Outlook 2007, Microsoft Office Word 2007, Microsoft Visual Studio 2005 Tools for the 2007 Microsoft Office system, Microsoft Visual Studio 2005

목차

  • 리본 및 Office Fluent 사용자 인터페이스

  • 리본 및 Office Fluent UI 에서 자주 하는 질문

  • 요약

리본 및 Office Fluent 사용자 인터페이스

리본은 Microsoft Office 2007의 몇가지 응용 프로그램에 대응하는 새로운 Microsoft Office Fluent 사용자 인터페이스의 일부로 이러한 응용 프로그램에는 Microsoft Office Access 2007, Microsoft Office Excel 2007, Microsoft Office Outlook 2007 및 Microsoft Office Word 2007 등이 있습니다. Office Fluent UI 는 Office의 이전 버전에 있던 메뉴, 도구 막대, 대화상자를 기본으로 합니다.

리본 및 Office Fluent UI 에서 자주 하는 질문

Fluent UI 를 사용자 지정하는 방법에 대해, 자주 하는 질문이 몇 가지 있습니다.

Beta 2 TR 를 사용하면, 요소명이 조금 다른 것을 알수 있습니다.  특히, 무엇이 바뀌었습니까?

<advanced> 요소는 <dialogBoxLauncher> 로 이름이 바뀌었습니다. <fileMenu><menu id="fileMenu"> 요소는 <officeMenu> 로 이름이 바뀌었습니다. 다음 서명을 사용하여, loadImage 콜백이 추가되었습니다.

Sub LoadImage(imageID, ByRef image)
public object loadImage(string imageId)

또한 많은 idMso 값이 변경되었습니다.

기본 제공 컨트롤의 내부 ID 를 공개하려면 어떻게 해야 하나요?

다음의 순서에 따라서 응용 프로그램 안에서 idMso 값을 개별적으로 확인할 수 있습니다.

응용 프로그램의 idMso값을 검색하려면

  1. Microsoft Office 버튼을 클릭하고, [Application Options ** 의 Options] 을 클릭합니다.

  2. [Customize] 을 클릭하고, 알고 싶은 정보의 항목을 선택합니다.

  3. 포인터를 항목위로 이동합니다. 컨트롤의 idMso 값이 괄호에 둘러싸여 대화상자의 힌트가 표시됩니다.

무효화 또는 재사용 할 필요가 있는 컨트롤의 컨트롤 ID 란 무엇입니까.

일부 리본 컨트롤에서는 발행되는 컨트롤 ID 가 무효화/재사용을 위해서 사용할 필요가 있는 컨트롤 ID 와 다릅니다. 이것은 이것들 특정 컨트롤의 내부적인 구현 방법에 따르는 것입니다. 이러한 이전에는 발행되어 있지 않았던 컨트롤 ID 는 커멘드를 재사용 및 무효화할 경우에 리본을 정의하기 위해서 사용되는 XML 의 <commands> 섹션에게만 적용됩니다. 다른 모든 시나리오에서는 (insertAfterMso/insertBeforeMso  컨트롤 삽입,<controlidMso=""/> 컨트롤 복제, imageMso 이미지의 재사용 등), 발행된 컨트롤 ID 가 올바른 ID 입니다.

다음의 표에서는 영향을 받는 ID 목록을 보여줍니다. 두번째는 발행된 컨트롤 ID,  세번째는 컨트롤을 무효화 또는 재사용하기 위해 필요한 ID 입니다.

표 1. 컨트롤을 무효화 및 재사용하기 위한 컨트롤 ID

컨트롤의 종류 컨트롤 ID 무효화/재사용하기 위한 컨트롤 ID

button

AlternativeText

ObjectSizeAndPropertiesDialog

gallery

Drawing1ColorPickerFill

ShapeFillColorPicker

gallery

Drawing1ColorPickerFillWordArt

ShapeFillColorPicker

gallery

Drawing1ColorPickerLineStyles

OutlineColorPicker

gallery

Drawing1ColorPickerLineStylesWordArt

OutlineColorPicker

gallery

Drawing1GalleryBrightness

PictureBrightnessGallery

gallery

Drawing1GalleryContrast

PictureContrastGallery

gallery

Drawing1GalleryTextures

ShapeFillTextureGallery

button

FileSaveAsOtherFormats

FileSaveAs

gallery

GalleryAllShapesAndCanvas

ShapesInsertGallery

gallery

GalleryAllShapesAndTextboxes

ShapesInsertGallery

checkBox

GridlinesExcel

ViewSheetGridlines

gallery

InsertBuildingBlocksEquationsGallery

EquationInsertGallery

gallery

PictureBorderColorPickerClassic

OutlineColorPicker

gallery

PictureShapeGallery

ShapeChangeShapeGallery

button

PlayMacro

MacroPlay

gallery

ShapeOutlineColorPicker

OutlineColorPicker

gallery

ShapeQuickStylesHome

ShapeStylesGallery

checkBox

ShowRuler

ViewRulerWord

gallery

TableTextStylesGallery

TextStylesGallery

button

UnmergeCells

SplitCells

checkBox

ViewGridlines

ViewGridlinesPowerPoint

checkBox

ViewHeadings

ViewSheetHeadings

특성 제한을 알아 둬야 할 필요가 있는 것은 무엇입니까?

  • getShowImage,getShowlabel,showImage,showLabel 특성은 대형의 컨트롤의 경우 무시됩니다.

  • descriptiongetDescription 특성은 메뉴 항목에만 적용됩니다.

  • getSizesize 특성은 메뉴 항목에는 적용되지 않습니다. 대신에 size 는 메뉴 항목의 항목 크기에 기반합니다.

  • getVisiblevisible 특성은 ButtonGroupSeparator 요소에 대해 무시됩니다.

Fluent UI 오류 메시지는 어떻게 표시합니까?

각 응용 프로그램에서 전반 옵션을 설정하고, 오류 메시지 표시를 제어할 수 있습니다.

Fluent UI 오류 메시지를 표시하려면

  1. Microsoft Office 버튼을 클릭하고, [Application Options ** 의 Options] 을 클릭하고, 대화상자를 표시합니다.

  2. [Advanced] 을 클릭하고, 옵션의 [General] 섹션을 확인합니다.

  3. [Show add-in user interface errors] 을 선택합니다.

UI 를 동적으로 변경하려면 어떻게 해야 하나요? 예를 들어, 코드를 실행중에 라벨이나 이미지를 업데이트 하거나 버튼의 표시/비표시를 바꾸거나 목록의 내용을 업데이트하려는 경우가 있습니다.

2007 Office Fluent Ribbon을 사용자 지정하는 (개발자 대상) (파트 1/3)」 문서의 「Fluent UI 를 동적으로 업데이트 한다」를 참조해 주세요.

Excel 2007에서 워크시트가 인쇄 미리보기시에 퀵 액세스 도구 막대 또는 리본에서 매크로를 실행할 수 없습니다. 이것은 의도된 동작입니까?

네, 이것은 의도된 동작입니다. Excel 2007에서는 인쇄 미리보기중에 매크로의 실행 기능이 무효가 됩니다. 예를 들어, 사용자 지정 버튼을 퀵 액세스 도구 막대에 추가했다고 합니다. Microsoft Office Button 를 클릭한 후 [Print] 에서[인쇄 미리보기] 를 클릭 하면, 현재의 워크시트가 인쇄 미리보기 모드로 표시됩니다. 퀵 액세스 도구 막대의 기본값의 버튼은 무효가 됩니다. 다음에 사용자 지정 버튼을 클릭 해도 아무것도 일어나지 않습니다. 즉, 버튼에 첨부된 매크로는 실행되지 않고, 대화상자는 표시되지 않습니다.

추가기능으로 사용하는 UI 오류를 컨트롤의 추가나 삭제에 따라 프로그램에서 제어하는 방법은 있습니까?

현재의 구현에서는 사용자 지정 그룹은 크기가 변경되지 않습니다. 큰 크기로 고정되어, 결과적으로 우선 순위가 높아집니다.

UI 를 초기화 하고, 모든 사용자 지정을 삭제하는 방법은 있습니까?

네.UI 를 초기화 하려면, 추가기능을 제거 한 다음에 열려 있는 문서를 모두 닫으면,  기본값의 UI 로 돌아옵니다.

갤러리 컨트롤의 항목수를 동적으로 변경할 수 있습니까?

네.getItemCount,getItemLabel 또는 getItemImage 특성의 콜백을 지정하여 갤러리를 동적으로 채울 수 있습니다.

Fluent UI 의 사용자 지정 컨트롤은 지원되나요?

아니오.대신에 기본 제공 컨트롤로 지원되지 않는 시나리오에서는 사용자 지정 작업 윈도우 기능을 사용하여, 사용자 지정 컨트롤을 호스트 할 수 있습니다. 자세한 내용은 「Office (2007) 사용자 지정 작업 윈도우 생성」문서를 참조해 주세요.

Office 응용 프로그램의 모든 컨트롤을 독자적인 사용자 지정으로 이용할 수 있습니까?

아니오, 일부의 컨트롤은 이용할 수 없습니다. 예를 들어, splitButtonGallery 컨트롤은 사용자 지정으로 이용할 수 없습니다. (splitButtonGallery 컨트롤의 예에는 Word 2007 의 텍스트의 하이라이트색 컨트롤이 있습니다).

리본 UI 가운데, 새로운 확장 모델을 사용하여  사용자 지정할 수 없는 부분은 어디입니까?

명령 모음 개체 모델을 사용하여, 바로 가기 메뉴를 사용자 지정할 수 있지만, 상태 막대, 미니 도구 막대 또는 바로 가기 메뉴를 사용자 지정할 수 없습니다.

미니 도구 막대를 오프로 할 수 있습니까?

네. 다음에서 순서를 보여줍니다.

미니 도구 막대를 오프로 하려면

  1. Microsoft Office 버튼을 클릭하고, [Application Options ** Options] 을 클릭하고, [Options] 대화상자를 표시합니다.

  2. [[Popular] 을 클릭합니다.

  3. [Show Mini Toolbar on selection] 옵션을 오프로 합니다.

Microsoft Office Access 2003 솔루션에서는 모든 액세스 메뉴와 도구 막대가 표시되지 않고, 사용자 지정 메뉴와 도구 막대가 표시됩니다. 이 솔루션을 Access 2007으로 열리면 어떻게 되나요? 사용자 지정 메뉴와 도구 막대는 [Add-Ins] 탭에 표시됩니까?

Access 2007 이 기본 메뉴와 도구 막대를 숨기고, 사용자 지정 메뉴와 도구 막대를 보이도록 설정된 경우, Access 2007은 이를 감지할 수 있습니다.  이 경우, Access 2007 은 사용자 지정 메뉴와 도구 막대를 [Add-Ins] 탭에 표시하지 않습니다.

첨부된 Fluent UI 사용자 지정 XML 는 Access 2007으로 어떻게 기능합니까? 사용자 지정 UI 를 데이터베이스에 보관 할 수 있습니까? 할 수 있는 경우, 그방법은?

Access 데이터베이스에는 새로운 Office Open XML Formats 파일구조가 도입되어 있지 않기 때문에 일반적으로 Access 의 Microsoft Visual Basic for Applications (VBA)는 데이터베이스 안의 테이블에 마크 업을 저장합니다. USysRibbons 라는 이름의 테이블을 생성하여, 이름과 마크 업을 포함한 2 개의 열 (RibbonName 라는 255 문자의 필드,RibbonXml 라는 메모 필드)를 보관합니다. 그리고, [Options] 대화상자를 사용하여, 테이블에서 이름으로 리본을 선택할 수 있습니다. 또, 표준 데이터 조작 테크닉을 사용하여  테이블에서 XML 컨텐츠를 읽기, Application.LoadCustomUI 메서드를 호출하여 새로운 리본 컨텐츠를 적용할 수 있습니다. 자세한 내용은 웹 사이트 「Microsoft Office Developer Center: Office Fluent UI (영어)」를 참조해 주세요.

두개의 추가기능이 같은 기본 제공 컨트롤을 재사용하려고 했을 경우, 어떻게 되나요?

컨트롤을 재사용 하려는 마지막의 추가기능이 액티브한 추가기능이 됩니다.

기본 제공 갤러리에서 프로그램을 사용하여  항목을 삭제할 수 있습니까?

확장을 사용하여, 프로그램에 의해 기본 제공 갤러리에서 항목을 삭제할 수 없습니다. 응용 프로그램의 개체 모델을 사용하면 삭제할 수 있는 경우가 있습니다.

적어도 "start-from-scratch" 시나리오에 대하여, 퀵 액세스 도구 막대를 프로그램에서 사용자 지정할 수 있습니까?

네.리본 요소의 startFromScratch 특성을 True 로 설정하고, 퀵 액세스 도구 막대를 사용자 지정할 수 있습니다. 다만, 업무상의 적절한 이유가 없는 한, 퀵 액세스 도구 막대를 사용자 지정하지 않는 것을 권장합니다. 이 기능은 사용자 지정용으로만 사용하십시오.

UI 를 로컬라이즈 하려면 어떻게 해야 하나요?

2 개의 옵션이 있습니다. COM 를 사용하는 경우는 현재의 UI 언어에 따라 다른 XML 파일을 반환할 수 있습니다. VBA 를 사용하면, 언어 마다 여러개의 VBA 파일을 준비하거나 모든 컨트롤의 적절한 라벨을 돌려주는 콜백을 준비할 수 있습니다.

Microsoft Office 버튼을 삭제할 수 있습니까?

Microsoft Office 버튼 메뉴의 항목을 모두 무효 또는 표시하지 않을 수 있지만, 버튼 자체를 삭제할 수 없습니다.

Fluent UI 를 사용하지만, Office 2003 응용 프로그램의 명령 모음을 사용하는 VBA 추가기능을 기술하려면 어떻게 해야 하나요?

Office 2003 및 2007 Microsoft Office system 의 양쪽 모두의 기능을 사용하는 VBA 문서를 생성할 수 있습니다. 이렇게 하는 한가지 방법은Application.Version 속성을 사용하여  Office 의 버전을 확인하는 것입니다. 값이 "12" (2007 Office 응용 프로그램 용) 미만의 경우는 명령 모음 코드를 실행합니다. Fluent UI XML 마크 업은 2007 Office 응용 프로그램에서 생성 된 문서를 Office 2003 응용 프로그램에서 열릴 수 있도록 컨버터에 의해 무시됩니다. 값이 "12" 의 경우, 특수한 처리를 실시할 필요는 없습니다. Fluent UI XML 마크 업을 포함한 파일은 Office Open XML Formats 파일에서 로드하여 콜백을 이용할 수 있습니다.

확장을 사용하여  상태 막대를 제어할 수 없습니다. 상태 막대를 프로그램에서 표시하지 않으려면 어떻게 해야 하나요?

다음의 코드를 사용하여  상태 막대를 표시하지 않을 수 있습니다.

Application.CommandBars("Status Bar").Visible = False

같은 그룹 또는 탭에 항목을 추가하는 2 개의 추가기능을 생성 하려면 어떻게 해야 하나요?

여러개의 추가기능이 사용자 지정 탭이나 그룹등의 컨테이너를 공유하도록 하는 컨트롤의 idQ 속성이 있습니다.

다음의 VBA 의 예에서는 2 개의 Excel 추가기능이 추가기능 탭의 같은 "Contoso" 그룹을 공유합니다. 각 추가기능은 1 개의 버튼을 탭에 추가합니다. 이 조작의 열쇠는 <customUI> 태그에 같을 유일 네임 스페이스를 지정하는 것입니다. 다음에 컨트롤은 idQ 를 사용하여  이 네임 스페이스를 참조할 수 있습니다.

추가 기능 1 의 CustomUI

<customUI xmlns="https://schemas.microsoft.com/office/2006/01/customui"
  xmlns:x="myNameSpace" >
  <ribbon>
    <tabs>
      <tab idMso="TabAddIns">
        <group idQ="x:Contoso" label="Contoso">
          <button id="C1" label="Contoso Button 1" size="large"
            imageMso="FileSave" onAction="c_action1" />
        </group>
      </tab>
    </tabs>
  </ribbon>
</customUI>

추가기능 2 의 CustomUI

<customUI xmlns="https://schemas.microsoft.com/office/2006/01/customui"
  xmlns:x="myNameSpace" >
  <ribbon>
    <tabs>
      <tab idMso="TabAddIns">
        <group idQ="x:Contoso" label="Contoso">
          <button id="C2" label="Contoso Button 2" size="large"
            imageMso="FileSave" onAction="c_action2" />
        </group>
      </tab>
    </tabs>
  </ribbon>
</customUI>

COM 추가기능을 사용하여  Fluent UI 를 사용자 지정하는 경우, 네임 스페이스 이름은 COM 추가기능의 ProgID 일 필요가 있지만, 동작은 같습니다. 공유 추가기능을 사용하는 경우, ProgIDAddInName .Connect 입니다. Microsoft Visual Studio 2005 Tools for the 2007 Microsoft Office system (Visual Studio 2005 Tools for Office Second Edition)를 사용하여  추가기능을 생성하는 경우, ProgID 는 추가기능의 이름입니다.

키 힌트를 컨트롤에 매핑하기 위해서는 어떻게 해야 하나요?

키 힌트는 Alt 키를 눌렀을 때에 리본상에 표시되는 키보드 바로 가기입니다. keytipgetKeytip 특성을 사용하여, 독자적인 키 힌트를 매핑해야 할 경우가 있습니다. (getKeytip 특성에는 키 힌트를 제공하는 콜백 프로시저를 지정합니다).

Note메모 :

키 힌트가 기본 제공 컨트롤 또는 다른 추가기능의 키 힌트와 충돌하는 경우는 충돌 하지 않는 값이 키 힌트에 자동적으로 매핑.  일반적으로 그룹의 키 힌트는 문자 "Z" 에서 시작되어야 합니다.

(VBA only) 2 개의 문서가 같을 콜백 서명을 가지는 경우, 액티브한 문서에서의 콜백이 호출됩니다. UI 문서에 관련된 콜백만이 UI 로 호출과 같게 하려면 어떻게 해야 하나요?

이것은 Office 2003에서도 존재하던 문제입니다. 대책으로서 추가기능 이름 또는 솔루션명을 콜백 이름에 추가하여 콜백 이름을 고유로 할 수 있습니다. 또, 콜백을 모듈에 배포하여, 프로시저의 풀네임을 사용하여  콜백을 참조할 수도 있습니다. 예를 들어, 콜백을 "MyAddInXYZ" 라는 이름의 모듈에 배포하고, "MyAddInXYZ.myCallback" 를 사용하여  콜백을 참조할 수 있습니다.

VBA에서 Fluent UI 컨트롤을 상호작용 조작할 수 있습니까?

Application.CommandBars 클래스에는 Fluent UI 컨트롤을 상호작용 조작하기 위한 다음의 메서드가 있습니다.

표 2. Application.CommandBars 클래스의 메서드

메서드 설명

Sub ExecuteMso(idMso As String)

idMso에서 지정된 커멘드를 실행합니다.

Function GetImageMso(idMso As String, Width As Long, Height As Long) As IPictureDisp

idMso에서 지정된 커멘드의 이미지를 돌려주고, Width 및Height에서 지정된 치수로 크기를 변경합니다. (이것은 in-process시에만 기능하여, Office 2003 의 사진과 마스크와 같습니다).

Function GetLabelMso(idMso As String) As String

Function GetLabelMso(idMso As String) As String

Function GetLabelMso(idMso As String) As String

요청된 컨트롤의 속성을 String 으로 돌려줍니다.

Function GetEnabledMso(idMso as String) as Boolean

Function GetEnabledMso(idMso as String) as Boolean

Function GetVisibleMso(idMso as String) as Boolean

기본 제공 컨트롤 상태를 부울 값으로 돌려줍니다.

각종 응용 프로그램의  리본 ID 를 판정하려면 어떻게 해야 하나요?

다음의 표는 각종 응용 프로그램의 리본 ID 목록입니다. 각 응용 프로그램은 이 ID 를IRibbonExtensibility 인터페이스의 getCustomUI 메서드 안의 솔루션에 건네줍니다. 이것에 의해, 응용 프로그램 (또는 추가기능)은 어떤 응용 프로그램이 당신의 코드를 로드했는지 판정할 수 있습니다. 또, 사용자는 호스트 응용 프로그램의 ID 에 따라, 다른 집합의 XML 컨텐츠를 반환할 수 있습니다.

표 3. 응용 프로그램 다른 리본 ID

응용 프로그램 리본 ID

Access

Microsoft.Access.Database

Excel

Microsoft.Excel.Workbook

PowerPoint

Microsoft.PowerPoint.Presentation

Word

Microsoft.Word.Document

Outlook

Microsoft.Word.Document


Microsoft.Outlook.Mail.Read


Microsoft.Outlook.Mail.Compose


Microsoft.Outlook.MeetingRequest.Read


Microsoft.Outlook.MeetingRequest.Send


Microsoft.Outlook.Appointment


Microsoft.Outlook.Contact


Microsoft.Outlook.Journal


Microsoft.Outlook.Task


Microsoft.Outlook.DistributionList


Microsoft.Outlook.Report


Microsoft.Outlook.Resend


Microsoft.Outlook.Response.Read


Microsoft.Outlook.Response.Compose


Microsoft.Outlook.Response.CounterPropose


Microsoft.Outlook.RSS


Microsoft.Outlook.Post.Read


Microsoft.Outlook.Post.Compose


Microsoft.Outlook.DistributionList


Microsoft.Outlook.Report


Microsoft.Outlook.Resend


Microsoft.Outlook.Response.Read


Microsoft.Outlook.Response.Compose


Microsoft.Outlook.Response.CounterPropose


Microsoft.Outlook.Response.CounterPropose


Microsoft.Outlook.RSS


Microsoft.Outlook.Post.Read


Microsoft.Outlook.Post.Compose


Microsoft.Outlook.Sharing.Read


Microsoft.Outlook.Sharing.Compose

확장 힌트에 이미지를 추가할 수 있습니까?

아니오.Supertip 속성을 사용하여  추가할 수 있는 것은 텍스트뿐입니다.

확장 힌트로 새로운 행을 시작하려면 어떻게 해야 하나요?

새로운 행을 시작하는 장소에 다음의 문자 코드를 입력합니다.

&#13;

수식 ID (idQ)를 가지는 컨트롤을 무효로 하려면 어떻게 해야 하나요?

콜백 프로시저를 호출하고, 다음과 같은 방식으로 컨트롤의 ID 를 전달할 수 있습니다.

idQ="x:test_idq" 로 합니다.

다음의 메서드를 사용하여  콜백을 호출합니다.

InvalidateControl("test_idq")

Note메모 :

COM 추가기능을 사용하여  Fluent UI 를 사용자 지정하는 경우는 예에서 보듯이 x 네임 스페이스를 콜백 프로시저를 포함한 추가기능의 ProgID로 설정할 필요가 있습니다. 그렇지 않은 경우, 콜백이 어느 추가기능을 호출하면 좋은가 불명확하기 때문에 콜백과InvalidateControl 은 기능하지 않습니다.

다른 추가기능에서는 (콜백이나 컨트롤이 그 추가기능의 XML 로 idQ 를 사용하여  지정되어 있었다고 해도) 콜백을 설정 하거나 컨트롤을 무효로 하거나 할 수 없습니다. ProgID 네임 스페이스를 가지는 추가기능만이 콜백을 취득하여 컨트롤을 무효로 할 수 있습니다.

COM 추가기능에 Shim 를 기술하려면 어떻게 해야 하나요?

자세한 내용은 MSDN 의 문서 「Isolating Office Extensions with the COM Shim Wizard (영어)」 를 참조해 주세요.

큰 메뉴 항목을 표시하려면 어떻게 해야 하나요?

Fluent UI XML 파일의 <menu> 태그로 itemSize="large" 를 설정합니다. itemSize 특성을 지원하는 요소의 경우는 값을 large로 설정하여, 항목을 크게 표시합니다 (일반적으로 크기의 항목에는 값을 normal 로 설정합니다).

이름은 같고 서명이 다른 2 의 콜백을 설정 할 수 있습니까?

가능하지만, 컨트롤 마다 다른 콜백을 설정하는 것 (과 이 두 콜백을 구별하기 위해서 기본 제공의 오버로드에 의지하지 않는 것)을 권장합니다. 예를 들어, 다음의 코드와 같이 이름이 같은 두개의 콜백을 지정한 Fluent UI 추가기능을 기술했다고 합시다.

public void doSomething(IRibbonControl control, bool pressState);
public void doSomething(IRibbonControl control);

또한 XML 마크 업에 toggleButton 컨트롤과 button 컨트롤이 정의되고, 어느 쪽에도 onAction="doSomething" 콜백이 지정되어 있다고 합시다.

이 경우, toggleButton 컨트롤만이 기능합니다. 이것은 Visual Basic 와 Visual C# 로 자동생성되는 IDispatch 가 구현되기 때문입니다. C++ 의 추가기능을 생성하여 독자적으로 IDispatch를 구현하면, 어느 쪽의 컨트롤도 기능합니다. (이것은 권장할 수 없습니다).

콜백 프로시저 마다 올바른 서명을 판정하려면 어떻게 해야 하나요?

다음의 표는 C++, VBA, C# 및 Visual Basic 의 모든 롤백과 그 프로시저 서명 목록입니다.

표 4. C#, VBA, C++ 및 Visual Basic 의 콜백과 서명 목록

컨트롤 콜백 이름 서명

(여러 컨트롤에서 가능)

getDescription

C#: string GetDescription(IRibbonControl control)


VBA: Sub GetDescription(control As IRibbonControl, ByRef description)


C++: HRESULT GetDescription([in] IRibbonControl *pControl, [out, retval] BSTR *pbstr Description)


Visual Basic: Function GetDescription(control As IRibbonControl) As String

(여러 컨트롤에서 가능)

getEnabled

C#: bool GetEnabled(IRibbonControl control)


VBA: Sub GetEnabled(control As IRibbonControl, ByRef enabled)


C++: HRESULT GetEnabled([in] IRibbonControl *pControl, [out, retval] VARIANT_BOOL *pvarfEnabled)


Visual Basic: Function GetEnabled(control as IRibbonControl) As Boolean

(여러 컨트롤에서 가능)

getImage

C#: IPictureDisp GetImage(IRibbonControl control)


VBA: Sub GetImage(control As IRibbonControl, ByRef image)


C++: HRESULT GetImage([in] IRibbonControl *pControl, [out, retval] IPictureDisp ** ppdispImage)


Visual Basic: Function GetImage(control as IRibbonControl) as IPictureDisp

(여러 컨트롤에서 가능)

getImageMso

C#: string GetImageMso(IRibbonControl control)


VBA: Sub GetImageMso(control As IRibbonControl, ByRef imageMso)


C++: HRESULT GetImageMso([in] IRibbonControl *pControl, [out, retval] BSTR *pbstrImageMso)


Visual Basic: Function GetImageMso(control as IRibbonControl) as String

(여러 컨트롤에서 가능)

getLabel

C#: string GetLabel(IRibbonControl control)


VBA: Sub GetLabel(control As IRibbonControl, ByRef label)


C++: HRESULT GetLabel([in] IRibbonControl *pControl, [out, retval] BSTR *pbstrLabel)


Visual Basic: Function GetLabel(control As IRibbonControl) As String

(여러 컨트롤에서 가능)

getKeytip

C#: string GetKeytip(IRibbonControl control)


VBA: Sub GetKeytip (control As IRibbonControl, ByRef label)


C++: HRESULT GetKeytip ([in] IRibbonControl *pControl, [out, retval] BSTR *pbstrKeytip)


Visual Basic: Function GetKeytip (control As IRibbonControl) As String

(여러 컨트롤에서 가능)

getSize

C#: RibbonControlSize GetSize(IRibbonControl control)


VBA: sub GetSize(control As IRibbonControl, ByRef size)


C++: HRESULT GetSize([in] IRibbonControl *pControl, [out, retval] RibbonControlSize *pintSize)


Visual Basic: Function GetSize(control As IRibbonControl) As RibbonControlSize

(여러 컨트롤에서 가능)

getScreentip

C#: string GetScreentip(IRibbonControl control)


VBA: Sub GetScreentip(control As IRibbonControl, ByRef screentip)


C++: HRESULT GetScreentip([in] IRibbonControl *pControl, [out, retval] BSTR *pbstrScreentip)


Visual Basic: Function GetScreentip(control As IRibbonControl) As String

(여러 컨트롤에서 가능)

getSupertip

C#: string GetSupertip(IRibbonControl control)


VBA: Sub GetScreentip(control As IRibbonControl, ByRef screentip)


C++: HRESULT GetSupertip([in] IRibbonControl *pControl, [out, retval] BSTR *pbstrScreentip)


Visual Basic: Function GetSupertip(control As IRibbonControl) As String

(여러 컨트롤에서 가능)

getVisible

C#: bool GetVisible(IRibbonControl control)


VBA: Sub GetVisible(control As IRibbonControl, ByRef visible)


C++: HRESULT GetVisible([in] IRibbonControl *pControl, [out, retval] VARIANT_BOOL *pvarfVisible)


Visual Basic: Function GetVisible(control As IRibbonControl) As Boolean

button

getShowImage

C#: bool GetShowImage(IRibbonControl control)


VBA: Sub GetShowImage (control As IRibbonControl, ByRef showImage)


C++: HRESULT GetShowImage ([in] IRibbonControl *pControl, [out, retval] VARIANT_BOOL *pvarShowImage)


Visual Basic: Function GetShowImage (control As IRibbonControl) As Boolean

button

getShowLabel

C#: bool GetShowLabel(IRibbonControl control)


VBA: Sub GetShowLabel (control As IRibbonControl, ByRef showLabel)


C++: HRESULT GetShowLabel ([in] IRibbonControl *pControl, [out, retval] VARIANT_BOOL *pvarShowLabel)


Visual Basic: Function GetShowLabel (control As IRibbonControl) As Boolean

button

onAction ? 재사용

C#: void OnAction(IRibbonControl control, ref bool CancelDefault)


VBA: Sub OnAction(control As IRibbonControl, byRef CancelDefault)


C++: HRESULT OnAction([in] IRibbonControl *pControl, [in,out] VARIANT _BOOL *fCancelDefault)


Visual Basic: Sub OnAction(control As IRibbonControl, byRef CancelDefault)

button

onAction

C#: void OnAction(IRibbonControl control)


VBA: Sub OnAction(control As IRibbonControl)


C++: HRESULT OnAction([in] IRibbonControl *pControl)


Visual Basic: Sub OnAction(control As IRibbonControl)

checkBox

getPressed

C#: bool GetPressed(IRibbonControl control)


VBA: Sub GetPressed(control As IRibbonControl, ByRef returnValue)


C++: HRESULT GetPressed([in] IRibbonControl *pControl, [out, retval] VARIANT_BOOL *pvarfPressed)


Visual Basic: Function GetPressed(control As IRibbonControl) As Boolean

checkBox

onAction

C#: void OnAction(IRibbonControl control, bool pressed)


VBA: Sub OnAction(control As IRibbonControl, pressed As Boolean)


C++: HRESULT OnAction([in] IRibbonControl *pControl, [in] VARIANT_BOOL *pvarfPressed)


Visual Basic: Sub OnAction(control As IRibbonControl, pressed As Boolean)

comboBox

getItemCount

C#: int GetItemCount(IRibbonControl control)


VBA: Sub GetItemCount(control As IRibbonControl, ByRef count)


C++: HRESULT GetItemCount([in] IRibbonControl *pControl, [out, retval] long *count)


Visual Basic: Function GetItemCount(control As IRibbonControl) As Integer

comboBox

getItemID

C#: string GetItemID(IRibbonControl control, int index)


VBA: Sub GetItemID(control As IRibbonControl, index As Integer, ByRef id)


C++: HRESULT GetItemID([in] IRibbonControl *pControl, [in] long cIndex, [out, retval] BSTR *pbstrID)


Visual Basic: Function GetItemID(control As IRibbonControl, index As Integer) As String

comboBox

getItemImage

C#: IPictureDisp GetItemImage(IRibbonControl control, int index)


VBA: Sub GetItemImage(control As IRibbonControl, index As Integer, ByRef image)


C++: HRESULT GetItemImage([in] IRibbonControl *pControl, [in] long cIndex, [out, retval] IPictureDisp **ppdispImage)


Visual Basic: Function GetItemImage(control As IRibbonControl, index As Integer) As IPictureDisp

comboBox

getItemLabel

C#: string GetItemLabel(IRibbonControl control, int index)


VBA: Sub GetItemLabel(control As IRibbonControl, index As Integer, ByRef label)


C++: HRESULT GetItemLabel([in] IRibbonControl *pControl, [in] long cIndex, [out, retval] BSTR *pbstrLabel)


Visual Basic: Function GetItemLabel(control As IRibbonControl, index As Integer) As String

comboBox

getItemScreenTip

C#: string GetItemScreenTip(IRibbonControl control, int index)


VBA: Sub GetItemScreenTip(control As IRibbonControl, index As Integer, ByRef screentip)


C++: HRESULT GetItemScreentip([in] IRibbonControl *pControl, [in] long cIndex, [out, retval] BSTR *pbstrScreentip)


Visual Basic: Function GetItemScreentip(control As IRibbonControl, index As Integer) As String

comboBox

getItemSuperTip

C#: string GetItemSuperTip(IRibbonControl control, int index)


VBA: Sub GetItemSuperTip (control As IRibbonControl, index As Integer, ByRef supertip)


C++: HRESULT GetItemSuperTip ([in] IRibbonControl *pControl, [in] long cIndex, [out, retval] BSTR *pbstrScreentip)


Visual Basic: Function GetItemSuperTip (control As IRibbonControl, index As Integer) As String

comboBox

getText

C#: string GetText(IRibbonControl control)


VBA: Sub GetText(control As IRibbonControl, ByRef text)


C++: HRESULT GetText([in] IRibbonControl *pControl, [out, reval] BSTR *pbstrText)


Visual Basic: Function GetText(control As IRibbonControl) As String

comboBox

onChange

C#: void OnChange(IRibbonControl control, string text)


VBA: Sub OnChange(control As IRibbonControl, text As String)


C++: HRESULT OnChange([in] IRibbonControl *pControl, [in] BSTR *pbstrText)


Visual Basic: Sub OnChange(control As IRibbonControl, text As String)

customUI

loadImage

C#: IPictureDisp LoadImage(string image_id)


VBA: Sub LoadImage(imageId As string, ByRef image)


C++: HRESULT LoadImage([in] BSTR *pbstrImageId, [out, retval] IPictureDisp ** ppdispImage)


Visual Basic: Function LoadImage(imageId As String) As IPictureDisp

customUI

onLoad

C#: void OnLoad(IRibbonUI ribbon)


VBA: Sub OnLoad(ribbon As IRibbonUI)


C++: HRESULT OnLoad([in] IRibbonUI *pRibbon)


Visual Basic: Function OnLoad(ribbon As IRibbonUI)

dropDown

getItemCount

C#: int GetItemCount(IRibbonControl control)


VBA: Sub GetItemCount(control As IRibbonControl, ByRef count)


C++: HRESULT GetItemCount([in] IRibbonControl *pControl, [out, retval] long *count)


Visual Basic: Function GetItemCount(control As IRibbonControl) As Integer

dropDown

getItemID

C#: string GetItemID(IRibbonControl control, int index)


VBA: Sub GetItemID(control As IRibbonControl, index As Integer, ByRef id)


C++: HRESULT GetItemID([in] IRibbonControl *pControl, [in] long cIndex, [out, retval] BSTR *pbstrID)


Visual Basic: Function GetItemID(control As IRibbonControl, index As Integer) As String

dropDown

getItemImage

C#: IPictureDisp GetItemImage(IRibbonControl control, int index)


VBA: Sub GetItemImage(control As IRibbonControl, index As Integer, ByRef image)


C++: HRESULT GetItemImage([in] IRibbonControl *pControl, [in] long cIndex, [out, retval] IPictureDisp **ppdispImage)


Visual Basic: Function GetItemImage(control As IRibbonControl, index As Integer) As IPictureDisp

dropDown

getItemLabel

C#: string GetItemLabel(IRibbonControl control, int index)


VBA: Sub GetItemLabel(control As IRibbonControl, index As Integer, ByRef label)


C++: HRESULT GetItemLabel([in] IRibbonControl *pControl, [in] long cIndex, [out, retval] BSTR *pbstrLabel)


Visual Basic: Function GetItemLabel(control As IRibbonControl, index As Integer) As String

dropDown

getItemScreenTip

C#: string GetItemScreenTip(IRibbonControl control, int index)


VBA: Sub GetItemScreenTip(control As IRibbonControl, index As Integer, ByRef screenTip)


C++: HRESULT GetItemScreentip([in] IRibbonControl *pControl, [in] long cIndex, [out, retval] BSTR *pbstrScreentip)


Visual Basic: Function GetItemScreentip(control As IRibbonControl, index As Integer) As String

dropDown

getItemSuperTip

C#: string GetItemSuperTip(IRibbonControl control, int index)


VBA: Sub GetItemSuperTip (control As IRibbonControl, index As Integer, ByRef superTip)


C++: HRESULT GetItemSuperTip ([in] IRibbonControl *pControl, [in] long cIndex, [out, retval] BSTR *pbstrSupertip)


Visual Basic: Function GetItemSuperTip (control As IRibbonControl, index As Integer) As String

dropDown

getSelectedItemID

C#: string GetSelectedItemID(IRibbonControl control)


VBA: Sub GetSelectedItemID(control As IRibbonControl, ByRef index)


C++: HRESULT GetSelectedItemID([in] IRibbonControl *pControl, [out, retval] LONG *pcItemIndex)


Visual Basic: Function GetSelectedItemID(control As IRibbonControl) As Integer

dropDown

getSelectedItemIndex

C#: int GetSelectedItemIndex(IRibbonControl control)


VBA: Sub GetSelectedItemIndex(control As IRibbonControl, ByRef index)


C++: HRESULT GetSelectedItemIndex([in] IRibbonControl *pControl, [out, retval] LONG *pcItemIndex)


Visual Basic: Function GetSelectedItemIndex(control As IRibbonControl) As Integer

dropDown

onAction

C#: void OnAction(IRibbonControl control, string selectedId, int selectedIndex)


VBA: Sub OnAction(control As IRibbonControl, selectedId As String, selectedIndex As Integer)


C++: HRESULT OnAction([in] IRibbonControl *pControl, [in] BSTR *selectedId, [in] LONG cSelectedIndex)


Visual Basic: Sub OnAction(control As IRibbonControl, selectedId As String, selectedIndex As Integer)

dynamicMenu

getContent

C#: string GetContent(IRibbonControl control)

VBA: Sub GetContent(control As IRibbonControl, ByRef content)

C++: HRESULT GetContent([in] IRibbonControl *pControl, [out, retval] BSTR *pbstrContent)

Visual Basic: Function GetContent(control As IRibbonControl) As String

editBox

getText

C#: string GetText(IRibbonControl control)


VBA: Sub GetText(control As IRibbonControl, ByRef text)


C++: HRESULT GetText([in] IRibbonControl *pControl, [out, retval] BSTR *pbstrText)


Visual Basic: Function GetText(control As IRibbonControl) As String

editBox

onChange

C#: void OnChange(IRibbonControl control, string text)


VBA: Sub OnChange(control As IRibbonControl, text As String)


C++: HRESULT OnChange([in] IRibbonControl *pControl, [in] BSTR *pbstrText)


Visual Basic: Sub OnChange(control As IRibbonControl, text As String)

gallery

getItemCount

C#: int GetItemCount(IRibbonControl control)


VBA: Sub GetItemCount(control As IRibbonControl, ByRef count)


C++: HRESULT GetItemCount([in] IRibbonControl *pControl, [out, retval] long *count)


Visual Basic: Function GetItemCount(control As IRibbonControl) As Integer

gallery

getItemHeight

C#: int getItemHeight(IRibbonControl control)


VBA: Sub getItemHeight(control As IRibbonControl, ByRef height)


C++: HRESULT getItemHeight([in] IRibbonControl *pControl, [out, retval] LONG *height)


Visual Basic: Function getItemHeight(control As IRibbonControl) As Integer

gallery

getItemID

C#: string GetItemID(IRibbonControl control, int index)


VBA: Sub GetItemID(control As IRibbonControl, index As Integer, ByRef id)


C++: HRESULT GetItemID([in] IRibbonControl *pControl, [in] long cIndex, [out, retval] BSTR *pbstrID)


Visual Basic: Function GetItemID(control As IRibbonControl, index As Integer) As String

gallery

getItemImage

C#: IPictureDisp GetItemImage(IRibbonControl control, int index)


VBA: Sub GetItemImage(control As IRibbonControl, index As Integer, ByRef image)


C++: HRESULT GetItemImage([in] IRibbonControl *pControl, [in] long cIndex, [out, retval] IPictureDisp **ppdispImage)


Visual Basic: Function GetItemImage(control As IRibbonControl, index As Integer) As IPictureDisp

gallery

getItemLabel

C#: string GetItemLabel(IRibbonControl control, int index)


VBA: Sub GetItemLabel(control As IRibbonControl, index As Integer, ByRef label)


C++: HRESULT GetItemLabel([in] IRibbonControl *pControl, [in] long cIndex, [out, retval] BSTR *pbstrLabel)


Visual Basic: Function GetItemLabel(control As IRibbonControl, index As Integer) As String

gallery

getItemScreenTip

C#: string GetItemScreenTip(IRibbonControl control, int index)


VBA: Sub GetItemScreenTip(control As IRibbonControl, index as Integer, ByRef screen)


C++: HRESULT GetItemScreentip([in] IRibbonControl *pControl, [in] long cIndex, [out, retval] BSTR *pbstrScreentip)


Visual Basic: Function GetItemScreentip(control As IRibbonControl, index As Integer) As String

gallery

getItemSuperTip

C#: string GetItemSuperTip(IRibbonControl control, int index)


VBA: Sub GetItemSuperTip (control As IRibbonControl, index as Integer, ByRef screen)


C++: HRESULT GetItemSuperTip ([in] IRibbonControl *pControl, [in] long cIndex, [out, retval] BSTR *pbstrSupertip)


Visual Basic: Function GetItemSuperTip (control As IRibbonControl, index As Integer) As String

gallery

getItemWidth

C#: int getItemWidth(IRibbonControl control)


VBA: Sub getItemWidth(control As IRibbonControl, ByRef width)


C++: HRESULT getItemWidth([in] IRibbonControl *pControl, [out, retval] LONG *width)


Visual Basic: Function getItemWidth(control As IRibbonControl) As Integer

gallery

getSelectedItemID

C#: int GetSelectedItemID(IRibbonControl control)


VBA: Sub GetSelectedItemID(control As IRibbonControl, ByRef index)


C++: HRESULT GetSelectedItemID([in] IRibbonControl *pControl, [out, retval] LONG *pcItemIndex)


Visual Basic: Function GetSelectedItemID(control As IRibbonControl) As Integer

gallery

getSelectedItemIndex

C#: int GetSelectedItemIndex(IRibbonControl control)


VBA: Sub GetSelectedItemIndex(control As IRibbonControl, ByRef index)


C++: HRESULT GetSelectedItemIndex([in] IRibbonControl *pControl, [out, retval] LONG *pcItemIndex)


Visual Basic: Function GetSelectedItemIndex(control As IRibbonControl) As Integer

gallery

onAction

C#: void OnAction(IRibbonControl control, string selectedId, int selectedIndex)


VBA: Sub OnAction(control As IRibbonControl, selectedId As String, selectedIndex As Integer)


C++: HRESULT OnAction([in] IRibbonControl *pControl, [in] BSTR *selectedId, [in] LONG cSelectedIndex)


Visual Basic: Sub OnAction(control As IRibbonControl, selectedId As String, selectedIndex As Integer)

menuSeparator

getTitle

C#: string GetTitle(IRibbonControl control)


VBA: Sub GetTitle (control As IRibbonControl, ByRef title)


C++: HRESULT GetTitle ([in] IRibbonControl *pControl, [out, retval] BSTR *pbstrTitle)


Visual Basic: Function GetTitle (control As IRibbonControl) As String

toggleButton

getPressed

C#: bool GetPressed(IRibbonControl control)


VBA: Sub GetPressed(control As IRibbonControl, ByRef returnValue)


C++: HRESULT GetPressed([in] IRibbonControl *pControl, [out, retval] VARIANT_BOOL *pvarfPressed)


Visual Basic: Function GetPressed(control As IRibbonControl) As Boolean

toggleButton

onAction - 재사용

C#: void OnAction(IRibbonControl control, bool pressed, ref bool cancelDefault)


VBA: Sub OnAction(control As IRibbonControl, pressed As Boolean, byRef cancelDefault)


C++: HRESULT OnAction([in] IRibbonControl *pControl, [in] VARIANT_BOOL *pvarfPressed, [in,out] VARIANT _BOOL *fCancelDefault)


Visual Basic: Sub OnAction(control As IRibbonControl, pressed As Boolean, byRef CancelDefault)

toggleButton

onAction

C#: void OnAction(IRibbonControl control, bool pressed)


VBA: Sub OnAction(control As IRibbonControl, pressed As Boolean)


C++: HRESULT OnAction([in] IRibbonControl *pControl, [in] VARIANT_BOOL *pvarfPressed)


Visual Basic: Sub OnAction(control As IRibbonControl, pressed As Boolean)

각 리본 속성이 의미하는 바를 알려면 어떻게 해야 하나요?

다음의 표는 모든 리본 특성과 그 설명의 목록입니다.

표 5. 리본 특성

특성 형/치 설명

description

문자열

itemSize 특성을 large 에 설정 했을 때에 메뉴에 표시되는 설명의 텍스트를 지정합니다.

enabled

true, false, 0, 1

컨트롤이 유효한지를 지정합니다.

getContent

콜백

동적 메뉴의 경우, 메뉴를 설명하는 XML 컨텐츠를 취득합니다.

getDescription

콜백

컨트롤 설명을 취득합니다.

getEnabled

콜백

컨트롤의 유효 상태를 취득합니다.

getImage

콜백

이 컨트롤의 이미지를 취득합니다.

getImageMso

콜백

컨트롤 ID 를 사용하여  기본 제공 컨트롤의 아이콘을 취득합니다.

getItemCount

콜백

콤보 상자, 드롭 다운 목록 또는 갤러리의 경우, 표시되는 항목수를 취득합니다.

getItemID

콜백

콤보 상자, 드롭 다운 목록 또는 갤러리의 경우, 특정 항목의 ID 를 취득합니다.

getItemImage

콜백

콤보 상자, 드롭 다운 목록 또는 갤러리의 경우, 특정 항목의 이미지를 취득합니다.

getItemLabel

콜백

콤보 상자, 드롭 다운 목록 또는 갤러리의 경우, 특정 항목의 라벨을 취득합니다.

getItemScreentip

콜백

콤보 상자, 드롭 다운 목록 또는 갤러리의 경우, 특정 항목의 힌트를 취득합니다.

getItemSupertip

콜백

콤보 상자, 드롭 다운 목록 또는 갤러리의 경우, 특정 항목의 확장 힌트를 취득합니다.

getKeytip

콜백

컨트롤의 키 힌트를 취득합니다.

getLabel

콜백

컨트롤의 라벨을 취득합니다.

getPressed

콜백

토글 버튼의 경우, 토글 버튼이 밀려 있는지 보이는 값을 취득합니다.

체크 박스의 경우, 체크 박스가 온이 되어 있는지 보이는 값을 취득합니다.

getScreentip

콜백

컨트롤의 힌트를 취득합니다.

getSelectedItemID

콜백

드롭 다운 목록 또는 갤러리의 경우, 선택된 항목의 ID 를 취득합니다.

getSelectedItemIndex

콜백

드롭 다운 목록 또는 갤러리의 경우, 선택된 항목의 인덱스를 취득합니다.

getShowImage

콜백

컨트롤 이미지를 표시할지를 지정하는 값을 취득합니다.

getShowLabel

콜백

컨트롤 라벨을 표시할지를 지정하는 값을 취득합니다.

getSize

콜백

컨트롤의 크기를 지정하는 값 (normal 또는 large)을 취득합니다.

getSupertip

콜백

컨트롤의 확장 힌트를 지정하는 값을 취득합니다.

getText

콜백

텍스트 박스 또는 편집 박스의 경우, 컨트롤의 편집 부분에 표시되는 텍스트를 취득합니다.

getTitle

콜백

메뉴 separator의 경우, (옆의 선 대신) 표시되는 텍스트를 취득합니다.

getVisible

콜백

컨트롤이 표시될지를 지정하는 값을 취득합니다.

id

문자열

컨트롤의 유일 사용자 정의 ID (idMsoidQ는 서로 배타적입니다. 몇개의 값을 지정해 주세요).

idMso

컨트롤 ID

기본 제공의 컨트롤 ID (ididQ는 서로 배타적입니다. 몇개의 값을 지정해 주세요).

idQ

수식된 ID

네임 스페이스 ID 를 앞에 두고 붙인 수식 컨트롤 ID (ididMso 는 서로 배타적입니다. 몇개의 값을 지정해 주세요).

image

문자열

컨트롤의 이미지를 지정합니다. (VBA에서는 이 값은 관계 ID 입니다).

imageMso

컨트롤 ID

기본 제공 이미지의 ID 를 지정합니다. 이것에 의해 Fluent UI 는 컨트롤의 아이콘을 복사 합니다.

insertAfterMso

컨트롤 ID

이 컨트롤을 그 후에 배포하는 기본 제공 컨트롤의 ID 를 지정합니다.

insertAfterQ

수식된 ID

이 컨트롤을 그 후에 배포하는 수식된 컨트롤 (idQ 속성을 지정한 컨트롤)의 ID 를 지정합니다.

insertBeforeMso

컨트롤 ID

이 컨트롤을 그 전에 배포하는 기본 제공 컨트롤의 ID 를 지정합니다.

insertBeforeQ

수식된 ID

이 컨트롤을 그 전에 배포하는 수식된 컨트롤 (idQ 속성을 지정한 컨트롤)의 ID 를 지정합니다.

itemSize

large, normal

메뉴의 경우, 메뉴내의 항목 크기를 지정합니다.

keytip

문자열

이 컨트롤의 키 힌트를 지정합니다. 키 힌트는 Alt 키와 함께 3 개의 문자의 하나를 눌렀을 때에 표시됩니다.

label

문자열

컨트롤의 라벨을 지정합니다.

onAction

콜백

이 컨트롤을 클릭 했을 때에 호출됩니다.

onChange

콜백

편집 박스 또는 콤보 상자에서 사용자가 텍스트를 확정하면 호출됩니다.

screentip

문자열

컨트롤의 힌트를 지정합니다.

showImage

true, false, 0, 1

컨트롤의 이미지를 표시할지를 지정합니다.

showItemImage

true, false, 0, 1

콤보 상자, 드롭 다운 목록 또는 갤러리에서 각 항목의 이미지를 표시할지를 지정합니다.

showItemLabel

true, false, 0, 1

콤보 상자, 드롭 다운 목록 또는 갤러리에서 각 항목의 라벨을 표시할지를 지정합니다.

showLabel

true, false, 0, 1

컨트롤의 라벨을 표시할지를 지정합니다.

size

large, normal

이 컨트롤의 크기를 지정합니다.

sizeString

문자열

"MMMMM" 등 컨트롤의 폭을 보이는 문자열을 지정합니다.

supertip

문자열

컨트롤의 확장 힌트 (일반적으로 힌트의 것보다 길고, 완전한 형식을 말합니다)를 지정합니다.

tag

문자열

다른 특정 속성에 관계하지 않는 컨트롤에 대해의 정보를 보관 할 수 있도록 사용자 정의 텍스트를 지정합니다.

title

문자열

메뉴 separator의 경우, (옆의 선 대신) 표시되는 텍스트를 지정합니다.

visible

true, false, 0, 1

컨트롤이 표시될지를 지정합니다.

XML 파일 또는 추가기능을 직접 사용하여  Fluent UI 를 사용자 지정 할 경우에 일관된 최종 사용자 경험을 생성하는 방법에 대해의 가이던스를 찾고 있습니다. 도와주세요.

Microsoft 다운로드 센터에서 2007 Office system 가이던스 문서 「UI Style Guide for Solutions and Add-Ins (영어)」를 다운로드할 수 있습니다.

사용자 지정 Fluent UI 로 텍스트 박스를 정렬 (오른쪽막힘 또는 왼쪽 가지런히 해)할 수 있습니까?

아니오.다만, 박스 컨트롤을 사용하여 같은 효과를 얻을 수 있을 가능성이 있습니다. 박스 턴트롤은 horizontal 또는 vertical로 설정할 수 있는 boxStyle 속성을 가지는 다른 컨트롤을 담을 수 있는 컨테이너입니다.

복수의 매크로를 포함한 템플릿에서 생성 한 문서가 있습니다. 리본 onAction 콜백에서 매크로를 호출하려고 했습니다만, 잘 되지 않았습니다. 오리지날 매크로를 변경하지 않고, 리본 컨트롤에서 기존의 매크로를 호출하려면 어떻게 해야 하나요?

Office 의 구버전용으로 생성 된 매크로를 컨트롤에의 참조를 포함하도록 매크로를 변경하지 않고 리본 컨트롤에서 호출할 수 없습니다. 다만, 다른 우회하는 방법이 있습니다. 모든 리본 콜백을 호스트하는 매크로를 포함한 새로운 모듈을 생성할 수 있습니다. 리본 컨트롤에서 새로운 매크로가 호출될 경우 구 매크로가 호출됩니다. 다음의 코드로 예를 보여줍니다.

새로운 RibbonX 모듈

Sub RibbonX_macroname(control as IRibbonControl)
   Select Case control
      button1
         macroname1
      button2
         macroname2
   End Select
End Sub

콤보 상자 컨트롤의 지정된 인덱스 또는 항목 ID 를 취득하려면 어떻게 해야 하나요?

onChange 콜백은 선택된 문자열을 돌려줍니다. 다음의 코드는 서명을 나타내고 있습니다.

Sub OnChange(control as IRibbonControl, text as String)

콤보 상자의 값이 선택될 때마다, onChange 콜백은 그 텍스트를 받습니다. 다만, 선택된 항목의 인덱스를 취득할 수 없습니다.

콜백이 호출되는 순서를 예측 또는 제어할 수 있습니까?

아니오.특정 순서로 호출되다 콜백에 의존하는 논리를 Fluent UI 솔루션에 추가 해서는 안됩니다.

명령 모음 컨트롤을 사용하는 응용 프로그램에서는 임의의 문자열을 보관 하기 위해서 Tag 속성이 도움이 되고 있었습니다. IRibbonControl.Tag 속성을 Fluent UI 솔루션으로 사용하려면 어떻게 해야 하나요?

2007 Microsoft Office 응용 프로그램에서는 Tag 속성을 사용하지 않습니다. 이 때문에 IRibbonControl.Tag 를 사용하여  임의의 문자열을 보관한 후, 실행시에 이러한 문자열을 조회할 수 있습니다. XML에서는 다음의 코드에 보이는 바와 같이 태그를 설정 할 수 있습니다.

<button> id="mybutton" tag="some string" onAction="MyFunction"/>

MyFunction 을 호출하면, "어떤 종류의 문자열" 이 된 IRibbonControl.Tag 속성을 얻을 수 있습니다.

일반적으로IRibbonControl.Id 속성을 사용하여  컨트롤 사이를 구별할 수 있지만, 포함되는 ID 에는 제한이 있습니다 (영숫자 이외는 사용할 수 없습니다. 또, 모두 고유해야 합니다). Tag 속성에는 이러한 제한이 없습니다. 이 때문에 Id 속성이 기능하지 않는 이래와 같은 상황에서 사용할 수 있습니다.

  • tag="C:\path\to\my\file.xlsm" 와 같이 파일 이름 등 컨트롤로 특수한 문자열을 보관 해야할 경우

  • 복수의 컨트롤을 콜백으로 똑같이 취급하고 싶지만, 모든 ID (고유인 것이 필요)의 목록을 가질 필요가 없는 경우.예를 들어, 다른 탭에서 모두 tag="blue"를 설정 한 버튼을 가져와서, 콜백의 일부 액션으로 ID 대신에 Tag 속성을 확인할 수 있습니다.

[Insert] 탭의 일러스트 그룹의 [차트] 버튼 와 같이 힌트나 확장 힌트에 이미지를 표시할 수 있습니까?

아니오.Fluent UI 확장에서는 현재 지원 되고 있지 않습니다.

Outlook 2007 용으로 정의된 사용자 지정 리본과 Word 2007 용으로 정의된 다른 리본이 있다고 합니다. 전자 메일 편집기에 Word 를 사용했을 경우, 전자 메일 메세지의 생성 또는 편집시에 어느 리본이 표시됩니까?

새로운 Inspector 형을 생성했을 경우, Outlook 는 GetCustomUI 메서드를 호출하여 인수로서 리본 ID 를 건네줍니다. Outlook 가 Word API 를 사용해도 이것은 Outlook 컨테이너으로 Outlook 리본을 사용합니다.

요약

여기에서는 고객의 요구에 맞춘 프로패셔널솔루션을 생성 할 경우에 필요한 정보를 제공합니다. 「2007 Office Fluent Ribbon을 사용자 지정하는 (개발자 대상) (파트 1/3)」에 보이는 사용자 지정 예제는 고객의 편리성에서 가장 중요한 컨트롤이나 옵션을 배포하는 UI 생성의 기점으로서 사용할 수 있습니다. 「2007 Office Fluent Ribbon을 사용자 지정하는 (개발자 대상) (파트 2/3)」의 레퍼런스정보는 Fluent UI 의 형태를 세부 사항에 제어하는 방법에 대해 설명합니다. 이 문서에서는 독자적인 사용자 지정 Fluent UI 를 생성 할 경우에 생길 가능성이 있는 많은 질문에 대한 대답합니다.  정보를 독자적인 응용 프로그램에 적용하여 경쟁 상대에게 이기는 혁신적으로 매력적인 솔루션을 생성할 수 있습니다.