Windows Ribbon Framework: como alterar a face e o tamanho da fonte?

Como você altera a face e o tamanho da fonte usados peloMoldura da fita do Windowsdo UIRibbon?

A fonte usada pela faixa de opções não corresponde à fonte escolhida pelo usuário como suas preferências do Windows - que é a preferência que meu aplicativo usa. Isso significa que, conforme a fonte do Windows aumenta, a faixa de opções fica menor.

Observe como a faixa de opções fica menor em cada captura de tela:

Segoe UI 9pt (padrão do Windows)

Segoe UI 12pt (o que eu uso)

Segoe UI 16pt (qual o uso do cliente)

Você pode ver quando chegamos aos 16 pontos, o texto na faixa de opções é bastante difícil de ler.

fundo

O usuário pode configurar o Windows para usar suas preferênciastamanho da fonte, por exemplo.:

8pt9pt12pt

e seus preferidosTipo de letra, por exemplo.:

MS Sans SerifMicrosoft Sans SerifTahomaUI do SegoeCalibri

mas oEstrutura de faixa de opções do Windows por padrão, usa uma fonte que énão a preferência do usuário.

Editar: Movido a imagem para cima para pegar esquilos atraídos por coisas brilhantes.
Edição 2: Adicionada outra imagem colorida, para obter uma colisão.
Edição 3: Edição para obter um aumento
Edição 4: Adicionando outra imagem diferente para obter um solavanco

A faixa de opções permite personalizar ocores da fita.

O seguinte fragmento de código é usado para definir oUI_PKEY_GlobalBackgroundColor da fita. Nesse caso, eu uso uma cor que é o esquema de cores Aero atualmente selecionado pelo usuário:

    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;

E agora a fita agora está colorida para corresponder ao esquema de cores do Windows:

texto alternativo http://i44.tinypic.com/287dufp.jpg

Mas não consigo encontrar a opção de alterar a face / tamanho da fonte.

Nota: Enquanto a fitamaio honrar as configurações de DPI do usuário, isso não éesta Pergunta, questão.

Funciona no Outlook 2010

Pode ser útil observar que a faixa de opções do Outlook 2010 respeita as preferências de fonte do usuário (menu). Você pode obter a fonte do menu do usuário chamando[SystemParametersInfo][6]:

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

ncm.lfMenuFont <---
9pt Outlook 2010

12pt Outlook 2010

12pt Outlook 2010

Observe que a faixa de opções aumenta de tamanho com o tamanho da fonte? (O que, nessas capturas de tela redimensionadas, significa que a faixa de opções não fica perceptivelmente menor.)

Existem duas possibilidades:

O Outlook 2010 sabe como ajustar o tamanho da fonte no Windows Ribbon FrameworkO Outlook 2010 não usa o Windows Ribbon FrameworkO Windows 7 Paint não funciona

Também é útil observar que o Windows Paint no Windows 7 nãonão honre as preferências de fonte do usuário. Isso me leva a acreditar que ele (mspaint) usa o Windows Ribbon Framework e que o Windows Ribbon Framework não suporta a configuração de um tamanho de fonte. Se você realmente tentou ser útil e leu até aqui, perceberá que esta é a resposta correta: não é possível. Portanto, se você quiser um representante de 300 grátis, adicione-o como resposta.

Editar: Postada na Microsoft

Palavras-chave: Windows Ribbon Framework, altere o tamanho da fonte, UIRibbon, face da fonte, ui da fita, ui cênica, fita cênica, fita cênica, fita fluente, interface do usuário fluente, altere a faixa de opções das janelas da fonte, uiribbon.h

A Microsoft possui várias implementações da faixa de opções:

Estrutura de faixa de opções do Windows - nativoCMFCRibbonBar for MFC - MFCFaixa de opções (WPF) - WPFribbon.codeplex.com - WinForms (não suportado)O MS Paint não respeita a preferência de fonte do menu

Aqui está uma captura de tela mostrando meu Windows 7 configuradoTipo de letra do menu configuração de 12pt, com msPaint visível e Outlook 2010 visível para comparação.

Código de amostra
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

Aqui está uma captura de tela com o WindowsCardápio fonte configurada para 14pt (em uma máquina de 96 dpi). O Outlook 2010 é 14pt, o Photoshop CS3 é 14pt. A fita é ... menos.

Veja tambémhttp://i.stack.imgur.com/VseEN.pnghttp://i42.tinypic.com/15x0pj5.jpg

questionAnswers(3)

yourAnswerToTheQuestion