到目前爲止,我嘗試通過SendMessage和其他幾個調用使用GetThemePartSize,GetThemeMetric,GetSystemMetrics,WM_GETTITLEBARINFOEX,但沒有接近真正的維度(啓用了主題的Windows 7)。如何檢索窗口最小化,最大化和關閉按鈕的大小?
基本上我的問題是:如何獲得這些按鈕的大小(以及位置,理想情況下甚至是處理)以及GetThemePartSize的檢索值甚至意味着什麼?他們有什麼好處?
我已經看過this answer和其他很多,但他們根本不工作。
謝謝
更新
漢斯:
[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
你打算怎麼處理這些信息? – siride
嗨,siride。問題一再在網上提出,但我找不到任何滿意的答案。另外,關於該主題的MSDN條目和API描述最好也是平庸的(儘管catch22.net對於較早的OS有一個很好的例子)。所以首先它是好奇心是什麼驅使我。我的個人目標是根據WPF演示應用程序中的可用空間,精確測量右上方菜單佔用的空間(在從左到右的系統上)並放置/隱藏/調整旁邊的控件大小。 – UnclePaul
許多方法可能導致此代碼錯誤。沒人能看到它。當你甚至不指定你需要的語言時,避免詢問發送密碼的問題。張貼片段,以便這些事情變得明顯。 –