如何更改所使用的字体和字体大小Windows 功能区框架 https://learn.microsoft.com/en-us/windows/win32/windowsribbon/-uiplat-windowsribbon-entry的 UIRibbon?
功能区使用的字体与用户选择作为其 Windows 首选项的字体不匹配 - 这是我的应用程序使用的首选项。这意味着随着 Windows 中的字体变大,功能区会变小。
请注意每个屏幕截图中的功能区如何变小:
Segoe UI 9pt(Windows 默认)
Segoe UI 12pt(我用的)
Segoe UI 16pt(客户使用的是什么)
您可以看到,当我们到达 16pt 时,功能区上的文字已经很难阅读了。
背景
用户可以配置 Windows 以使用他们的首选字体大小, e.g.:
以及他们的首选字体, e.g.:
- MS 无衬线字体
- 微软无衬线字体
- Tahoma
- Segoe UI
- Calibri
but the Windows 功能区框架默认情况下使用的字体是not用户的偏好。
Edit:将图片移至顶部以捕捉被闪亮物体吸引的松鼠。
Edit 2:添加了另一张彩色图片,以获得凹凸。
Edit 3:编辑以获得凹凸
Edit 4:添加另一张不同的图片以获得凹凸
功能区确实允许自定义colors丝带的。
下面的代码片段用于设置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 的配色方案相匹配:
但我找不到更改字体/大小的选项。
Note:当丝带may尊重用户的 DPI 设置,这不是this问题。
它适用于 Outlook 2010
请注意,Outlook 2010 的功能区确实尊重用户(菜单)的字体首选项,这可能会有所帮助。您可以通过调用获取用户的菜单字体[SystemParametersInfo][6]
:
SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &ncm, 0));
ncm.lfMenuFont <---
9分展望2010年
2010年12点展望
2010年12点展望
注意到功能区随着字体大小而增大吗? (在这些调整大小的屏幕截图中,这意味着功能区在感知上并没有变小。)
有两种可能:
- Outlook 2010知道如何在Windows功能区框架中调整字体大小
- Outlook 2010 不使用 Windows 功能区框架
Windows 7 画图功能无法使用
还需要注意的是,Windows 7 中的 Windows Paint 可以not尊重用户的字体偏好。这让我相信它(mspaint)确实使用了 Windows Ribbon Framework,并且 Windows Ribbon Framework 不支持设置字体大小。如果您确实尝试过提供帮助,并一直阅读到这里,您就会意识到这是正确的答案:这是不可能的。因此,如果您想要免费的 300 次代表,您可以将其添加为答案。
Edit: 交叉发布到 Microsoft https://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/2c6def3a-9a42-4da1-8fda-046885dd0782/windows-ribbon-framework-how-to-change-font-face-and-size?forum=windowsribbondevelopment
关键词:Windows功能区框架,更改字体大小,UIRibbon,字体,功能区ui,风景ui,风景功能区,流畅的功能区,流畅的ui,更改字体windows功能区,uiribbon.h
Microsoft 有许多 Ribbon 实现:
-
Windows 功能区框架 https://learn.microsoft.com/en-us/windows/win32/windowsribbon/-uiplat-windowsribbon-entry- 本国的
-
用于 MFC 的 CMFCRibbonBar https://learn.microsoft.com/en-us/cpp/mfc/reference/cmfcribbonbar-class?view=vs-2019 - MFC
-
功能区 (WPF) https://learn.microsoft.com/en-us/previous-versions/ff799534(v=vs.110) - WPF
-
ribbon.codeplex.com https://archive.codeplex.com/?p=ribbon- 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 功能区框架 14pt != 14pt
这是 Windows 的屏幕截图Menu字体配置为 14pt(在 96dpi 机器上)。 Outlook 2010 是 14pt,Photoshop CS3 是 14pt。功能区...更少。
See also
- https://i.stack.imgur.com/VseEN.png https://i.stack.imgur.com/VseEN.png
- http://i42.tinypic.com/15x0pj5.jpg http://i42.tinypic.com/15x0pj5.jpg