본문 바로가기
코딩취미/C,C++

[MFC] ribbon.mfcribbon-ms 리소스 xml 편집 : RibbonBarEditor, Application Buttion 수정관련

by 브링블링 2023. 12. 22.
728x90

기존에 개발된 MFC GUI 변경요청으로, Application Button/윈도우스타일/퀵메뉴를 수정하는 일이 생겼습니다.

기본적으로 Application Button을 안보이게 하는 것은 간단한 코드로 해결될 것이라고 생각했는데,

코드로 해결이 되지 않아서 좀 더 확인해보니 리소스를 로드해서 적용하는 방식으로 구성이 되어있었습니다.

다음은 그런 과정을 거쳐서 변경한 내용에 대한 정리입니다.

 

방법1 : 상단의 Application Button & 퀵 메뉴 숨기기

MFC에서 상단의 Application 버튼과 퀵 메뉴를 보이지 않게 하는 방법은 주로 메인 프레임 윈도우의 초기화 코드에서 해당 요소들을 숨기는 것입니다. 

// 예제 코드에서는 CMainFrame 클래스를 기준으로 작성되었습니다.
// 만약 다른 윈도우 클래스를 사용 중이라면 해당 클래스에 맞게 수정이 필요합니다.

BOOL CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
        return -1;

    // 상단의 Application 버튼(시스템 메뉴)을 숨기기
    ModifyStyle(WS_SYSMENU, 0);

    // 퀵 메뉴를 숨기기
    SetMenu(NULL);

    // 나머지 초기화 코드를 추가할 수 있습니다.

    return 0;
}

 

위의 코드에서 ModifyStyle 함수를 사용하여 WS_SYSMENU를 제거하여 시스템 메뉴(상단의 Application 버튼)를 숨기고, SetMenu(NULL)을 사용하여 퀵 메뉴를 숨깁니다.

 

또한, MDI 구조에서는 각각의 문서 뷰에 대한 메뉴가 별도로 있을 수 있습니다. 따라서 문서 뷰에 대한 메뉴도 숨기고 싶다면 해당 문서 뷰 클래스의 초기화 코드에서도 SetMenu(NULL)을 사용하여 메뉴를 숨길 수 있습니다.

 

ModifyStyle() 적용

void ModifyStyle(DWORD dwRemove, DWORD dwAdd, UINT nFlags = 0);
  • dwRemove: 제거하려는 스타일 비트를 나타냅니다.
  • dwAdd: 추가하려는 스타일 비트를 나타냅니다.
  • nFlags: 플래그로, 일반적으로 0으로 설정합니다.

이 함수는 주어진 비트마스크를 사용하여 윈도우의 스타일을 수정합니다. 각각의 비트마스크는 특정 스타일 옵션을 나타냅니다. 이 함수는 현재 윈도우의 스타일을 변경하고, 변경된 스타일이 즉시 적용됩니다.

 

예) ModifyStyle(0, FWS_PREFIXTITLE);

FWS_PREFIXTITLE 스타일은 주로 MDI(Multiple Document Interface) 애플리케이션에서 사용되며, MDI 자식 프레임 윈도우의 타이틀에 대한 접두사(prefix)를 제어하는 데 사용됩니다.

 

FWS_PREFIXTITLE 스타일을 사용하면 MDI 자식 프레임의 타이틀에 문서 이름이 아닌 다른 정보를 표시할 수 있습니다. 이것은 MDI 자식 프레임의 타이틀을 사용자 지정하고, 필요한 정보를 더 효과적으로 표시하고자 할 때 유용합니다.

예를 들어, 아래와 같이 코드를 사용하여 MDI 자식 프레임의 타이틀을 변경할 수 있습니다:

ModifyStyle(0, FWS_PREFIXTITLE);

// 자식 프레임의 타이틀을 설정
SetWindowText(_T("내 문서 - My Document"));

 

위의 코드에서 ModifyStyle(0, FWS_PREFIXTITLE)은 현재 윈도우 스타일에 FWS_PREFIXTITLE을 추가합니다. 그 후에 SetWindowText 함수를 사용하여 MDI 자식 프레임의 타이틀을 설정합니다.

 

이렇게 함으로써 FWS_PREFIXTITLE 스타일을 사용하여 MDI 자식 프레임의 타이틀을 원하는 형식으로 변경할 수 있습니다.

728x90

방법2 : IRibbonButtonApplicationEditor 수정하기

IRibbonButtonApplicationEditor는 Office 개발에서 사용되는 인터페이스 중 하나입니다. 이 인터페이스는 Office Fluent UI(리본 인터페이스)의 컨트롤 중 하나인 "Button" 컨트롤에 대한 사용자 지정을 제공하는 인터페이스입니다.

 

리본 인터페이스는 Microsoft Office 제품군에서 사용되며, 사용자에게 풍부한 그래픽 기능을 제공하는 툴바 및 메뉴 시스템을 구현하는 데 사용됩니다. IRibbonButtonApplicationEditor는 이 중에서 버튼 컨트롤에 대한 특정 기능을 커스터마이징하고 제어하는 데 사용됩니다.

 

다음은 IRibbonButtonApplicationEditor의 주요 특징 중 일부입니다:

  1. 이벤트 처리: 버튼 컨트롤에서 발생하는 이벤트를 처리할 수 있습니다. 예를 들어, 버튼 클릭 등의 이벤트를 감지하고 이에 대한 동작을 정의할 수 있습니다.
  2. 속성 제어: 버튼의 특정 속성을 제어할 수 있습니다. 예를 들어, 버튼의 라벨, 이미지, 활성화 여부 등을 설정할 수 있습니다.
  3. 동적 업데이트: 버튼의 상태를 동적으로 업데이트할 수 있습니다. 이는 특정 조건에 따라 버튼의 외관이나 동작을 변경해야 하는 경우에 유용합니다.

IRibbonButtonApplicationEditor를 사용하려면, 해당 인터페이스를 구현하는 클래스를 작성하고, Office 애드인(Add-in) 개발에서 이를 활용하여 리본 버튼을 제어할 수 있습니다. 구체적인 사용 예제 및 코드는 Office 개발 문서 및 예제에서 참고할 수 있습니다.

 

IRibbonBarEditor의 리소스를 수정

IRibbonBarEditor 인터페이스는 MFC(Microsoft Foundation Classes)에서 사용되는 것이 아니라, 주로 Office 개발에서 사용되는 인터페이스로 알고 있습니다. 혹시 IRibbonBarEditor가 사용자 정의한 클래스나 프레임워크에서 나온 특정 인터페이스라면, 더 자세한 정보를 알려주시면 더 정확한 도움을 드릴 수 있을 것입니다.

 

Office 개발에서의 Ribbon은 XML 기반의 리소스로 정의되어 있으며, 리본을 수정하려면 주로 Ribbon XML 파일을 편집하거나, Ribbon 관련 콜백 함수를 사용합니다.

  1. Ribbon XML 파일 편집: Ribbon은 주로 XML 파일에서 정의됩니다. 이 파일을 편집하여 버튼, 그룹, 탭 등을 추가, 제거 또는 수정할 수 있습니다. Ribbon XML 파일은 Visual Studio의 리소스 에디터에서도 편집할 수 있습니다.
  2. Ribbon Callback 함수 수정: Ribbon의 동작을 수정하려면 MFC 애플리케이션에서 리본에 대한 일부 콜백 함수를 구현해야 합니다. 예를 들어, OnLoadRibbonElements 함수를 사용하여 리본의 초기화를 제어할 수 있습니다.

앞에서 방법1로 접근하다가 해결이 안되서, 방법2로 접근해서 문제를 해결했습니다.

 

1. 리소스 이미지 확인

 

2. XML 확인

 

3. XML 파서로 내용 확인

 

4. 필요한 부분의 element 수정.

 

5. 파일 저장 및 컴파일, 끝.

 

 

728x90