Изменение фонового цвета меню - VB

  1. Для перекрашивания фона меню формы пользуюсь вот таким кодом (АПИ-декларации опускаю):


textual

Код к задаче: «Изменение фонового цвета меню - VB»

Public Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, _ 
                            ByVal wParam As Long, ByVal lParam As Long) As Long 
     
    Static overMenu As Boolean, oldRootItem As Long 
    Dim mbInfo As PMENUBARINFO, retVal As Long, i As Integer, pt As POINTAPI 
     
    Select Case uMsg 
         
        Case WM_NCMOUSEMOVE 
            If wParam = HTMENU Then 
                overMenu = True 
                For i = 1 To 7  ' << число корневых пунктов меню = 7 
                    mbInfo.cbSize = Len(mbInfo) 
                    retVal = GetMenuBarInfo(frmParams.hwnd, OBJID_MENU, i, mbInfo) 
                    If retVal <> 0 Then 
                        GetCursorPos pt 
                        If PtInRect(mbInfo.rcBar, pt.X, pt.Y) Then Exit For 
                    End If 
                Next 
                If i <> oldRootItem Then 
                    ' перекрашиваем при переходе с одного корневого пункта меню на другой, 
                    ' когда собственно и появляется неприятная 'граница' вокруг пункта: 
                    Debug.Print 'Moved to root item ' & i 
                    SetMenuColour frmParams.hwnd, frmParams.BackColor, False 
                    oldRootItem = i 
                End If 
            End If 
             
        Case WM_MOUSEMOVE, WM_LBUTTONDOWN, WM_RBUTTONDOWN 
            If overMenu Then 
                ' перекрашиваем при выходе мыши за пределы menubar (и при щелчке там же): 
                Debug.Print 'Moved or clicked outside menubar' 
                overMenu = False 
                oldRootItem = -1 
                SetMenuColour frmParams.hwnd, frmParams.BackColor, False 
            End If 
             
        Case WM_EXITMENULOOP 
            ' меню 'захлопнулось' - после этого тоже остаётся граница --> перекрашиваем: 
            Debug.Print 'Menu closed' 
            overMenu = False 
            oldRootItem = -1 
            SetMenuColour frmParams.hwnd, frmParams.BackColor, False 
             
        Case Else 
             
    End Select 
     
    WindowProc = CallWindowProc(mWndProcNext2, hwnd, uMsg, wParam, ByVal lParam) 
     
End Function

СДЕЛАЙТЕ РЕПОСТ

10   голосов, оценка 3.900 из 5



Похожие ответы
  1. Дан массив размера N и целое число K (1 <= K < N). Осуществить сдвиг элементов массива влево на K позиций (при этом AN перейдет в AN–K, AN–1 — в AN–K–1, …, AK+1 — в A1, а исходное значение K первых элементов будет потеряно). Последние K элементов полученного массива положить равными 0.

  1. Доброго времени суток! Столкнулся с такой проблемой - через СOM порт от контроллера получаю массив байт данных, сохраняю их в виде переменной Double.

  1. Помогите, не работает программа, не могу изменить цвет региона при нажатии на него P.S. Это Active X

  1. Всем привет! Помогите разобраться как сжать изображение, т.е. есть рисунок безумного размера (к примеру 6000*4000 ) как его подогнать под квадратный PictureBox ? Так же интересует выбор определенной области изображения для сохранения. А в идеале может есть специальная форма, на которую можно загрузить изображение и затем сохранить только определенную область (ну знаете как выбор аватарки в контакте: выбираешь фотку и потом перетягиваешь специальный квадратик для выбора определенной части изображения)?

  1. Ребят, всем привет, помогите с циклом, мне нужно разработать технологию, позволяющую исследовать изменение значений поверхности и объема шарового сегмента при изменении высоты шарового сегмента от начального значение h0 до конечного hк с шагом deltah и радиуса шара от начального значения R0 до конечного Rк с шагом delta R Внешний и внутренний циклы - с предусловием Для Отладки принять h0=50, hк=100, deltah=10, R0=60, Rк=70, deltaR=5 И вторую: Разработать информационную технологию вычисления приближенного значения корня уравнения с точностью E. Начальное приближение к корню принять равным 0,6 x-(1-0,4x)^(1/2)=0 У меня есть похожая работа, я ее прикрепил

  1. Здравствуйте, подскажите как, зная хендл какого-небудь стороннего окна, изменять его такие свойства по типу в VB Form.Top, Form.Left или Form.Height, Form.Width. Спасибо

  1. В форме куча контролов Image (массив imgLTR(32)). Код между звездочками *********. В процедуре обработки клика на рисунке он временно "вдавливается" путем изменения .BorderStyle. Все работает... ...Однако, если свойство .Stretch установлено true (программно или нет, без разницы), то никакого вдавливания не происходит! Кто подскажет в чем прикол и как временно выделить кликнутый image (не переходя на ненужный PictureBox)? Кстати проверил: командой с кнопки вдавливается, а с клика нет!

  1. Для этого я использую API-функцию SystemParametersInfo:

  1. Подскажите как привязать элементы управления к форме, чтобы при растягивании (изменении размера) формы элементы управления не стояли на месте. Надеюсь вы поняли

  1. Кто знает: как можно изменить шрифт (сам шрифт, размер, начертание) для MsgBox? a) единым разом для всех Msgbox данного проекта (во всех модулях) b) внутри отдельного MsgBox (различное написание отдельных частей сообщения).