获取与当前主题对应的窗口边框指标

Jiale Xue - MSFT 35,556 信誉分 Microsoft 供应商
2024-04-08T07:53:30.5166667+00:00

你好

就我而言,我调用 SetWindowTheme 函数来禁用窗口主题(最后两个参数是空字符串),这样做,我有一个这样的 XP 样式窗口。

52780-ads%C4%B1z.jpg

如您所见,窗口现在的边缘更粗。我使用 GetSystemMetrics 函数,但它返回错误的指标(BorderX = 1,Caption = 23)。是否有任何方法或 API 可以解决此问题?

谢谢。 Note:此问题总结整理于: Get Window Border Metric Corresponding to Current Theme

Windows 窗体
Windows 窗体
一组用于开发图形用户界面的 .NET Framework 托管库。
93 个问题
Windows API - Win32
Windows API - Win32
一组适用于桌面和服务器应用程序的核心 Windows 应用程序编程接口 (API)。 以前称为 Win32 API。
49 个问题
0 个注释 无注释
{count} 票

接受的答案
  1. Hui Liu-MSFT 40,866 信誉分 Microsoft 供应商
    2024-04-08T08:41:11.46+00:00

    我可以使用 Win32 C++ 窗口应用程序重现相同的结果。 SetWindowTheme(hWnd, L"", L""); 不会导致窗口边框的宽度发生变化。 SM_CXEDGE 和 SM_CXFRAME 也有相同的行为。 您还可以检查从客户区左侧到非客户区左侧的距离,无论是否调用 SetWindowTheme(hWnd, L"", L""); 都保持不变; 像这样:

    	GetClientRect(hWnd, &rcClient);  
    	GetWindowRect(hWnd, &rcWind);  
    	ptDiff.x = ((rcWind.right - rcWind.left) - rcClient.right) / 2;	  
    

    基于文档:“当 pszSubAppName 和 pszSubIdList 为 NULL 时,主题管理器将删除以前应用的关联。可以通过指定空字符串 (L“ ”)“ 来阻止将视觉样式应用于指定窗口

    似乎删除以前应用的关联和视觉样式不会影响边框的大小。您看到的 bordor 外观的变化可能是由视觉效果引起的。


    如果回复有帮助,请点击“接受答案”并点赞。

    注意:如果您想接收此线程的相关电子邮件通知,请按照我们文档中的步骤启用电子邮件通知。

    1 个人认为此答案很有帮助。
    0 个注释 无注释

0 个其他答案

排序依据: 非常有帮助