これまでのところ、SendMessage を介して GetThemePartSize、GetThemeMetric、GetSystemMetrics、WM_GETTITLEBARINFOEX、およびその他のいくつかの呼び出しを使用してみましたが、実際のサイズ (テーマが有効になっている Windows 7) に近づくことさえできませんでした。
基本的に私の質問は次のとおりです。これらのボタンのサイズ (および位置、理想的にはハンドルも) を取得する方法と、GetThemePartSize から取得した値は何を意味しますか? 彼らは何のために良いですか?
私はすでにこの回答と他の多くを見ましたが、それらは単に機能しません。
ありがとうございました
アップデート
ハンスの場合:
[DllImport("uxtheme", ExactSpelling=true)]
private extern static Int32 GetThemePartSize(IntPtr hTheme, IntPtr hdc, WindowPart part, WindowPartState state, ref RECT pRect, ThemeSize eSize, out SIZE size);
[StructLayout(LayoutKind.Sequential)]
private struct RECT
{
public int left;
public int top;
public int right;
public int bottom;
}
[StructLayout(LayoutKind.Sequential)]
private struct SIZE
{
public int cx;
public int cy;
}
private const int TS_TRUE = 1;
private const int CBS_NORMAL = 1;
private const int WP_CLOSEBUTTON = 18;
private const string VSCLASS_WINDOW = "WINDOW";
/* inside a method */
var rect = new RECT {left = 0, right = 200, top = 0, bottom = 200};
var size = new SIZE();
var windowHandle = new WindowInteropHelper({MyWindow}).Handle;
var theme = OpenThemeData(windowHandle, VSCLASS_WINDOW);
GetThemePartSize(theme, null, WP_CLOSEBUTTON, CBS_NORMAL, ref rect, TS_TRUE, ref size);
// result on w7 with default theme -> size.cx == 28, size.cy == 17