Я немного confussed, структура menuinfo в MSDN http://msdn.microsoft.com/en-us/library/windows/desktop/ms647575%28v=vs.85%29.aspx говорит:Каким образом можно установить и использовать структуру MenuInfo?
hbrBack
Type: HBRUSH
A handle to the brush to be used for the menu's background.
Итак ... Как я мог получить, что необходимый дескриптор кисти ?, я не вижу какой-либо метод ручки для объекта Brush ... это кисть, это противоречит.
А также, я не могу просто использовать растровое изображение для фона меню? Я попытался использовать ручку растрового изображения, но фон меню не изменился.
UPDATE
Этот код не работал, не изменил цвет фона.
Public Sub SetMenuBackground()
MenuHandle = GetSystemMenu(form.Handle, False)
Dim brush As IntPtr =
CreateSolidBrush(CUInt(ColorTranslator.ToWin32(Color.Red)))
Dim mi As New MenuInfo
mi.cbSize = Marshal.SizeOf(GetType(MenuInfo))
mi.fMask = &H2 ' MIM_BACKGROUND
mi.hbrBack = brush
SetMenuInfo(MenuHandle, mi)
End Sub
В API FUNC и структура:
<DllImport("user32.dll")> _
Private Shared Function SetMenuInfo(
ByVal hmenu As IntPtr,
<[In]> ByRef lpcmi As MenuInfo
) As Boolean
End Function
Private Structure MenuInfo
Dim cbSize As Int32
Dim fMask As Int32
Dim dwStyle As Int32
Dim cyMax As Int32
Dim hbrBack As IntPtr
Dim dwContextHelpID As Int32
Dim dwMenuData As Int32
Public Sub New(ByVal owner As Control)
cbSize = Marshal.SizeOf(GetType(MENUINFO))
End Sub
End Structure
http://msdn.microsoft.com/en-us/library/windows/desktop/dd183518(v=vs.85).aspx (его не объект, его дескриптор кисти) – Plutonix
Вы используете WinApi, вам нужно использовать ссылку Brush, созданную таким же образом. http://pinvoke.net/search.aspx?search=brush&namespace=[All] –
Вы пытаетесь смешивать несколько разных типов дескрипторов (например, 'HBITMAP'! =' HBRUSH' и 'Graphics.Bitmap' ! = 'BITMAP'). Это может помочь прояснить ситуацию, если вы объясните, почему * вы хотите использовать структуру WinAPI 'MENUINFO' (предназначенную для сырых вызовов API) в коде .NET. Что вы пытаетесь сделать здесь? –