2

我有点困惑,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.

所以...我怎样才能获得必要的画笔句柄?,我看不到画笔对象的任何句柄方法...是画笔,这令人困惑。

而且,我不能只使用位图作为菜单背景吗?我尝试使用位图句柄,但菜单背景没有改变。

更新

此代码不起作用,不会更改背景颜色。

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函数和结构:

<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
4

1 回答 1

1

我已经改变了结构,现在它工作正常

<System.Runtime.InteropServices.
StructLayout(System.Runtime.InteropServices.LayoutKind.Sequential,
CharSet:=System.Runtime.InteropServices.CharSet.Auto)>
Public Structure MenuInfo
    Public cbSize As UInteger
    Public fMask As UInteger
    Public dwStyle As UInteger
    Public cyMax As UInteger
    Public hbrBack As IntPtr
    Public dwContextHelpID As UInteger
    Public dwMenuData As UIntPtr
End Structure

我从中学到了什么?:pinvoke.net 网站从未提供有效/有效的示例。

于 2013-11-13T02:09:30.823 回答