首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >要获得最小化、最大化和关闭按钮的默认大小,我必须使用哪个Uxtheme函数?

要获得最小化、最大化和关闭按钮的默认大小,我必须使用哪个Uxtheme函数?
EN

Stack Overflow用户
提问于 2012-01-08 12:40:24
回答 2查看 1.4K关注 0票数 11

我使用DrawThemeBackground函数在画布上绘制一些系统元素,并且需要绘制表单的标题按钮,唯一遗漏的部分是如何获得标题按钮的default大小。Exist any Uxtheme function to get that info?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-09 00:26:15

看起来这比听起来更难。

首先是GetThemeMetricGetThemeInt。但是当你尝试检索标题按钮的属性时,你会看到很多引用,这些函数返回一个0x8007490,一些“找不到元素”。

然后是GetThemePartSize。这个看起来有点用。也就是说,它对于WP_CLOSEBUTTON来说工作得很好,但是对于WP_MINBUTTON来说,它返回的却是胡言乱语。我不建议使用这个函数,因为它检索按钮的默认尺寸。例如,如果用户更改了标题大小,您将无法获得正确的值。无论如何,它可以这样命名:

代码语言:javascript
复制
uses
  uxtheme, themes;
...

var
  Err: HRESULT;
  Size: TSize;
begin
  Err := GetThemePartSize(ThemeServices.Theme[teWindow], 0,
                          WP_CLOSEBUTTON, CBS_NORMAL, nil, TS_TRUE, Size);

我不知道前两个函数在正常工作时会返回什么(当前标题栏大小或默认标题栏大小的按钮的尺寸)。

获得准确结果的唯一可能方法似乎是使用WM_GETTITLEBARINFOEX消息。但它有一个缺点;它只适用于Vista和更高版本。您可能需要定义消息和它使用的结构,这取决于您使用的Delphi版本(这里是D2007)。

代码语言:javascript
复制
const
  CCHILDREN_TITLEBAR = 5;
  WM_GETTITLEBARINFOEX = $033F;

type
  tagTITLEBARINFOEX = record
    cbSize: DWORD;
    rcTitleBar: TRect;
    rgstate: array[0..CCHILDREN_TITLEBAR] of DWORD;
    rgrect: array [0..CCHILDREN_TITLEBAR] of TRect;
  end;
  TITLEBARINFOEX = tagTITLEBARINFOEX;
  TTitleBarInfoEx = tagTITLEBARINFOEX;
  PTitleBarInfoEx = ^TTitleBarInfoEx;

...

var
  TitleInfo: TTitleBarInfoEx;
begin
  SendMessage(Handle, WM_GETTITLEBARINFOEX, 0, NativeInt(@TitleInfo));

然后,您可以从rect TitleInfo.rgrect[5]获取close按钮的大小。详情请参见"TITLEBARINFOEX structure“。请注意,这些值是以屏幕坐标表示的。

如果你需要支持XP和/或更低版本,我建议你使用老的GetSystemMetrics(SM_CXSIZE)GetSystemMetrics(SM_CYSIZE) (“窗口标题或标题栏中按钮的宽度,以像素为单位”)。你需要根据是否启用了主题,是否启用了aero等,来计算出一些近似值。

票数 10
EN

Stack Overflow用户

发布于 2012-01-08 19:01:48

我想带SPI_GETNONCLIENTMETRICSSystemParametersInfo就是你要找的。我猜minimize和maximize按钮使用NONCLIENTMETRICSiSmCaptionWidth while close使用iCaptionWidth来确定宽度。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8775428

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档