WindowsリボンフレームワークのUIRibbonで使用されるフォント面とフォントサイズをどのように変更しますか?
リボンで使用されるフォントが、ユーザーがWindowsの設定として選択したフォントと一致しません。これは私のアプリケーションが使用する設定です。これは、Windowsのフォントが大きくなると、リボンが小さくなることを意味します。
各スクリーンショットでリボンがどのように小さくなるかに注意してください。
Segoe UI 9pt(Windowsのデフォルト)
Segoe UI 12pt(私が使用しているもの)
Segoe UI 16pt(お客様が使用するもの)
16ptに達するまでに、リボンのテキストが非常に読みにくくなっていることがわかります。
バックグラウンド
ユーザーは、好みのフォントサイズを使用するようにWindowsを構成できます。例:
- 8点
- 9点
- 12点
およびそれらの優先フォント面、例:
- MSサンセリフ
- Microsoftサンセリフ
- タホマ
- Segoe UI
- Calibri
ただし、Windowsリボンフレームワークはデフォルトで、ユーザーの好みではないフォントを使用します。
編集:光沢のあるものに引き付けられたリスを捕まえるために画像を上に移動しました。
編集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の配色に一致するように色付けされています。
しかし、フォントの面/サイズを変更するオプションが見つかりません。
注:リボンはユーザーのDPI設定を尊重する場合がありますが、それはこの質問ではありません。
Outlook2010で動作します
Outlook 2010のリボンは、ユーザーの(メニュー)フォント設定を尊重することに注意してください。次のコマンドを呼び出すと、ユーザーのメニューフォントを取得できます[SystemParametersInfo][6]
。
SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &ncm, 0));
ncm.lfMenuFont <---
9pt Outlook 2010
12pt Outlook 2010
12pt Outlook 2010
フォントサイズに応じてリボンのサイズが大きくなることに注意してください。(これは、これらのサイズ変更されたスクリーンショットでは、リボンが知覚的に小さくならないことを意味します。)
2つの可能性があります:
- Outlook 2010は、Windowsリボンフレームワークでフォントサイズを調整する方法を知っています。
- Outlook2010はWindowsリボンフレームワークを使用しません
Windows7ペイントが機能しない
また、Windows7のWindowsペイントはユーザーのフォント設定を尊重しないことに注意してください。これにより、(mspaint)はWindowsリボンフレームワークを使用し、Windowsリボンフレームワークはフォントサイズの設定をサポートしていないと思います。あなたが実際に助けようとして、ここまで読んだら、これが正しい答えであることに気付くでしょう:それは不可能です。したがって、無料の300担当者が必要な場合は、それを回答として追加します。
キーワード: Windowsリボンフレームワーク、フォントサイズの変更、UIRibbon、フォントフェイス、リボンui、風光明媚なui、風光明媚なリボン、流暢なリボン、流暢なui、フォントウィンドウリボンの変更、uiribbon.h
Microsoftには、いくつかのリボン実装があります。
- Windowsリボンフレームワーク-ネイティブ
- MFC用CMFCRibbonBar -MFC
- リボン(WPF) -WPF
- Ribbon.codeplex.com -WinForms(サポートされていません)
MSペイントはメニューのフォント設定を尊重しません
これは、構成済みのWindows 7メニューフォント設定が12ptで、msPaintが表示され、Outlook2010が比較のために表示されているスクリーンショットです。
サンプルコード
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リボンフレームワーク14pt!= 14pt
これは、 14pt(96dpiマシン上)用に構成されたWindowsメニューフォントのスクリーンショットです。Outlook 2010は14ポイント、PhotoshopCS3は14ポイントです。リボンは...少ないです。