一千萬個為什麽

搜索

Windows功能區框架:如何更改字體外觀和大小?


如何改變通過的 Windows Ribbon Framwork 的UIRibbon?

功能區使用的字體與用戶選擇的字體與Windows首選項不匹配 - 這是我的應用程序使用的首選項。這意味著隨著Windows中的字體變大,功能區變小。

請註意每個屏幕截圖中的功能區如何變小:

Segoe UI 9pt(Windows默認)

alt text

Segoe UI 12pt(我用的是什麽)

alt text

Segoe UI 16pt(客戶使用什麽)

alt text

你可以看到,當我們到達16pt時,功能區上的文字很難閱讀。

背景

用戶可以將Windows配置為使用其首選的字體大小,例如:

  • 8PT
  • 9pt的
  • 12磅

和他們喜歡的字體面,例如:

  • MS Sans Serif
  • Microsoft Sans Serif
  • 宋體
  • Segoe UI
  • 宋體

但默認情況下, Windows功能區框架使用用戶首選項的字體。

Edit: Moved picture up top to catch squirrels attracted by shiny things.
Edit 2: Added another colorful picture, to get a bump.
Edit 3: Editing to get a bump
Edit 4: Adding another different picture to get a bump


功能區允許自定義功能區的顏色

The following code fragment is used to set the UI_PKEY_Global背景Color of the ribbon. In this case i use a color that is the user's currently select Aero color scheme:

    IUIFramework framework;
    ...

    TColor glass = Dwm.GetColorizationColor();
    VarCast(v, ColorToUIHSB(glass), UI_PKEY_Global背景Color.pid);

    IPropertyStore ps = framework as IPropertyStore;
    ps.SetValue(UI_PKEY_Global背景Color, PROPVARIANT(v));
    ps.Commit;

現在,色帶現在已著色,以匹配Windows的配色方案:

替代文字http://i44.tinypic.com/287dufp.jpg

但我找不到更改字體面/大小的選項。

Note: While the ribbon may honor the user's DPI settings, that isn't this question.


它適用於Outlook 2010

註意Outlook 2010的功能區確實符合用戶的(菜單)字體首選項可能會有所幫助。您可以通過調用 [SystemParametersInfo] [6] 來獲取用戶的菜單字體:

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

ncm.lfMenuFont <---

9pt Outlook 2010

alt text

12pt Outlook 2010

alt text

12pt Outlook 2010

alt text

請註意,色帶的大小會隨著字體大小而增加? (在這些經過調整大小的屏幕截圖中,這意味著功能區在感知上不會變小。)

有兩種可能性:

  • Outlook 2010知道如何在Windows功能區框架中調整字體大小
  • Outlook 2010不使用Windows功能區框架

Windows 7 Paint不起作用

註意Windows 7中的Windows Paint 尊重用戶的字體首選項也很有用。這讓我相信它(mspaint)確實使用Windows功能區框架,並且Windows功能區框架不支持設置字體大小。如果你真的試圖提供幫助,並一直讀到這裏,你會發現這是正確的答案:這是不可能的。因此,如果您想要一個免費的300代表,您可以添加它作為答案。

Edit: Cross-posted to Microsoft

Keywords: Windows Ribbon Framework, change font size, UIRibbon, font face, ribbon ui, scenic ui, scenic ribbon, fluent ribbon, fluent ui, change font windows ribbon, uiribbon.h

Microsoft有許多功能區實現:


MS Paint不支持菜單字體首選項

這是一個屏幕截圖,顯示我配置的Windows 7 菜單字體設置為12pt,可以看到msPaint,並且可以看到Outlook 2010以進行比較。

alt text


示例代碼

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

以下是配置為14pt(在96dpi計算機上)的Windows 菜單字體的屏幕截圖。 Outlook 2010是14pt,Photoshop CS3是14pt。功能區是......少。

alt text

也可以看看

最佳答案

根據Windows 7 Paint的行為,這似乎是不可能的。 :)

轉載註明原文: Windows功能區框架:如何更改字體外觀和大小?

猜你喜歡