Windows Ribbon Framework: Как изменить шрифт и размер шрифта?

Как изменить лицо шрифта и размер шрифта, используемогоОбрамление ленты WindowsUIRibbon?

Шрифт, используемый на ленте, не совпадает со шрифтом, выбранным пользователем в качестве своих настроек Windows - это предпочтение, которое использует мое приложение. Это означает, что когда шрифт в Windows становится больше, лента становится меньше.

Обратите внимание, как лента становится меньше на каждом скриншоте:

Segoe UI 9pt (по умолчанию в Windows)

Segoe UI 12pt (что я использую)

Segoe UI 16pt (какой клиент использует)

Вы можете видеть, что к 16pt текст на ленте становится довольно трудным для чтения.

Фон

Пользователь может настроить Windows для использования своих предпочтительныхразмер шрифтаНапример:

8pt9пт12pt

и их предпочитаютлицо шрифтаНапример:

MS Sans SerifMicrosoft без засечекTahomaSegoe UICalibri

ноWindows Ribbon Framework по умолчанию используется шрифтне предпочтения пользователя.

Редактировать: Переместил изображение вверх, чтобы поймать белок, привлеченных блестящими вещами.
Изменить 2: Добавлена ​​еще одна красочная картинка, чтобы получить удар.
Изменить 3: Редактирование, чтобы получить удар
Изменить 4: Добавление еще одной другой картины, чтобы получить удар

Лента позволяет настроитьцвета ленты.

Следующий фрагмент кода используется для установкиUI_PKEY_GlobalBackgroundColor ленты. В этом случае я использую цвет, который в настоящее время выбирает цветовую схему Aero пользователя:

    IUIFramework framework;
    ...

    TColor glass = Dwm.GetColorizationColor();
    VarCast(v, ColorToUIHSB(glass), UI_PKEY_GlobalBackgroundColor.pid);

    IPropertyStore ps = framework as IPropertyStore;
    ps.SetValue(UI_PKEY_GlobalBackgroundColor, PROPVARIANT(v));
    ps.Commit;

А теперь лента теперь раскрашена в соответствии с цветовой схемой Windows:

альтернативный текст http://i44.tinypic.com/287dufp.jpg

Но я не могу найти вариант, чтобы изменить шрифт лица / размер.

Замечания: Пока лентаможет соблюдать настройки DPI пользователя, это неэтот вопрос.

Работает в Outlook 2010

Может быть полезно отметить, что лента Outlook 2010 соответствует настройкам шрифта пользователя (меню). Вы можете получить шрифт меню пользователя, позвонив[SystemParametersInfo][6]:

SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &ncm, 0));

ncm.lfMenuFont <---
9pt Outlook 2010

12pt Outlook 2010

12pt Outlook 2010

Заметьте, лента увеличивается в размере с размером шрифта? (Что в этих скриншотах с измененным размером означает, что лента не становится воспринимаемой меньше.)

Есть две возможности:

Outlook 2010 знает, как настроить размер шрифта в Windows Ribbon FrameworkOutlook 2010 не использует Windows Ribbon FrameworkWindows 7 Paint не работает

Также полезно отметить, что Windows Paint в Windows 7 делаетне соблюдайте настройки шрифта пользователя. Это наводит меня на мысль, что он (mspaint) действительно использует Windows Ribbon Framework и что Windows Ribbon Framework не поддерживает установку размера шрифта. Если вы на самом деле пытались быть полезными и читали до конца, вы поймете, что это правильный ответ: это невозможно. Поэтому, если вы хотите получить 300 повторений, добавьте это в качестве ответа.

Редактировать: Перекрестная публикация в Microsoft

Ключевые слова: Windows Ribbon Framework, изменить размер шрифта, UIRibbon, лицо шрифта, интерфейс ленты, живописный интерфейс, живописную ленту, свободную ленту, свободный интерфейс, изменить ленту окон шрифтов, uiribbon.h

Microsoft имеет ряд реализаций ленты:

Windows Ribbon Framework - родныеCMFCRibbonBar для MFC - МФЦЛента (WPF) - WPFribbon.codeplex.com - WinForms (не поддерживается)MS Paint не учитывает предпочтения шрифта меню

Вот скриншот, показывающий мою настроенную Windows 7Меню Шрифт значение 12pt с видимым msPaint и видимым для сравнения Outlook 2010.

Образец кода
type 
    TfrmRibbonTest = class(TForm, IUIApplication)
      ...
    private
       Fframework: IUIFramework;

       {IUIApplication}
       function  OnViewChanged(viewId: SYSUINT; typeID: UI_VIEWTYPE; const view: IUnknown; verb: UI_VIEWVERB; uReasonCode: SYSINT): HResult; stdcall;
       function  OnCreateUICommand(commandId: SYSUINT; typeID: UI_COMMANDTYPE; out commandHandler: IUICommandHandler): HResult; stdcall;
       function  OnDestroyUICommand(commandId: SYSUINT; typeID: UI_COMMANDTYPE; const commandHandler: IUICommandHandler): HResult; stdcall;
    end;


procedure TForm1.Button1Click(Sender: TObject);
var
   hr: HRESULT;
begin
   Fframework := CreateComObject(CLASS_UIRibbonFramework) as IUIFramework;
   hr := Fframework.Initialize(Self.Handle, Self); //we implement IUIApplication
   OleCheck(hr);
   hr := Fframework.LoadUI(hInstance, 'APPLICATION_RIBBON');
   OleCheck(hr);
end;

function TfrmRibbonTest.OnCreateUICommand(commandId: SYSUINT; typeID: UI_COMMANDTYPE; out commandHandler: IUICommandHandler): HResult;
begin
    Result := S_OK;
end;

function TfrmRibbonTest.OnDestroyUICommand(commandId: SYSUINT; typeID: UI_COMMANDTYPE;
  const commandHandler: IUICommandHandler): HResult;
begin
    Result := S_OK;
end;

function TfrmRibbonTest.OnViewChanged(viewId: SYSUINT; typeID: UI_VIEWTYPE; const view: IUnknown; verb: UI_VIEWVERB; uReasonCode: SYSINT): HResult;
begin
    Result := S_OK;
end;
Windows Ribbon Framework 14pt! = 14pt

Вот скриншот с WindowsМеню шрифт настроен на 14pt (на машине с разрешением 96 точек на дюйм). Outlook 2010 14pt, Photoshop CS3 14pt. Лента ... меньше.

Смотрите такжеhttp://i.stack.imgur.com/VseEN.pnghttp://i42.tinypic.com/15x0pj5.jpg

Ответы на вопрос(3)

Ваш ответ на вопрос