7

テーマ ボタンをペイントするには、次のコードを使用します。

var
  h: HTHEME;
begin
  if UseThemes then begin
    SetWindowTheme(Handle, 'explorer', nil);
    h := OpenThemeData(Handle, 'WINDOW');
    if h <> 0 then
    try
      DrawThemeBackground(h, Canvas.Handle, WP_CLOSEBUTTON, GetAeroState, ClientRect, nil);
    finally
      CloseThemeData(h);
    end;
  end
  else
    DrawFrameControl(Canvas.Handle, ClientRect, DFC_CAPTION, DFCS_CAPTIONCLOSE or GetClassicState)
end;

このコードは正常に動作しますが、Windows 8 または 10 でも Windows 7 のテーマのようにペイントされたボタンが表示されます。Windows 10 または 8 のテーマを使用して [閉じる] ボタンをペイントすることは可能ですか?

ここに画像の説明を入力

4

2 に答える 2

1

テーマからビットマップを取得する実行可能なソリューション:

var
  h: HTHEME;
  Rect: TRect;
  BufSize: Cardinal;    

h := OpenThemeData(Handle, 'DWMWINDOW');
if h <> 0 then
try
  GetThemeRect(h, WP_MINCAPTION, MNCS_ACTIVE, TMT_ATLASRECT, Rect);
  ...
  GetThemeStream(...);
finally
  CloseThemeData(h);
end;

ここで説明されている GetThemeStream の使用方法: GetThemeStream の使用法、プログラム Vista Style Builder の作成者である Andreas Verhoeven に感謝します。

于 2015-12-15T05:37:03.837 に答える