2011-04-29 53 views
0

我需要使用Windows API(> = Windows XP,如果這很重要)獲取上下文菜單的圖標區域的寬度。我的意思是icon area你可以在this question, there is an image看到。它是爲菜單左側的圖標預留的空間。獲取上下文菜單的圖標區域的寬度

我掃描了大量的信息,您可以通過SystemParametersInfoGetSystemMetrics獲得信息,但什麼也沒找到。但是必須有一些默認值,對嗎?我怎麼能得到它?

回答

2

本機win32菜單並不真正支持圖標,所以你不能真的稱它爲圖標區域。在基本菜單中,該區域的大小是SM_CXMENUCHECK寬(可能是填充的SM_CXEDGE加號)對於Vista +,您可以使用MENU_POPUP *常量和GetThemeInt找到一些better metrics。 AFAIK複製經典Win95 +菜單所需的確切佈局和邊界常量未記錄在案。

由於您正在討論圖標,我假設您要將圖標添加到菜單中,所以您的寬度應該最大爲(yourIconWidth,GetSystemMetrics(SM_CXMENUCHECK))+填充。 This old MSJ article可能是最好的菜單所有者在那裏繪製教程,codeproject有自己的menu article section以及幾個不同的所有者繪製實現。 (MS Office和Visual Studio也使用自定義內容)

作爲最後一點,既然你說XP +你應該可以使用HBMMENU_CALLBACK,只需要擔心圖標而不是菜單的其餘部分...

+1

如果你想要那些花哨的圖標菜單,你最好的選擇可能是兩個實現; HBMMENU_CALLBACK或完全所有者在NT5上畫圖,並在NT6 + – Anders 2011-04-29 10:47:52

+0

+1上使用新的32位(預乘alpha)菜單位圖支持,用於NT6 + – 2011-04-29 10:57:47

+0

Anders,謝謝提示。我只需要在特殊情況下測量寬度來做一些定位。所以沒有涉及繪圖。主題是有趣的,我嘗試了一下。看起來像我最好的選擇(在Vista +)將是類似於MENU_POPUPBORDERS + MENU_POPUPCHECK + MENU_POPUPGUTTER + MENU_POPUPSEPARATOR的寬度。但邊框似乎會根據圖像大小而改變。我越想它,更具吸引力似乎只是估計大小。 – 2011-04-29 11:39:48