На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Обратите внимание:
1. Прежде чем начать новую тему или отправить сообщение, убедитесь, что вы не нарушаете правил форума!
2. Обязательно воспользуйтесь поиском. Возможно, Ваш вопрос уже обсуждали. Полезные ссылки приведены ниже.
3. Темы с просьбой выполнить какую-либо работу за автора в этом разделе не обсуждаются.
4. Используйте теги [ code=cpp ] ...текст программы... [ /code ] для выделения текста программы подсветкой.
5. Помните, здесь телепатов нет. Старайтесь формулировать свой вопрос максимально грамотно и чётко: Как правильно задавать вопросы
6. Запрещено отвечать в темы месячной и более давности без веских на то причин.

Полезные ссылки:
user posted image FAQ Сайта (C++) user posted image FAQ Форума user posted image Наши Исходники user posted image Поиск по Разделу user posted image MSDN Library Online (Windows Driver Kit) user posted image Google

Ваше мнение о модераторах: user posted image B.V.
Модераторы: B.V.
  
> Трабла с сообщениями!
    Вообщем сообщения перебивают друг друга, серьёзно!

    Я юзаю Shell_NotifyIcon, в которой uCallBackMessage принимает значение WM_MOUSEMOVE.
    Так вот: при щелчке на иконке в баре у меня вызывается SetCapture (для самопального меню, вообщем).
    Так после движения крысой по иконке, SetCapture сбрасывается, т.е. эффект как от ReleaseCapture!!! Ну кому такое нужно?

    Если не понятно - объясняю на пальцах: менюшка открывается, да вот не будет закрываться, бекоз SetCapture уже не действует :(

    Использую VB 6.0.
    Для Shell_NotifyIcon сервак сообщений вызывает процедуру FORM_MOUSEMOVE, где и идёт обработка сообщения.

    Для SetCapture - FORM_MOUSEUP другой формы. Но если будет ещё хоть одна мессага от таскбара, то капча уже не действует!
      ты код покажи..
        Все юзается на VB в линолиуме и хр.
        Процедура загрузки:
        Private Sub Form_Load()
        Set myMenu = New mmenu
        myMenu.ParentHWND = Me.hwnd

           With nid
               .cbSize = Len(nid)
               .hwnd = Me.hwnd
               .uId = vbNull
               .uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
               .uCallBackMessage = WM_MOUSEMOVE
               .hIcon = Icon
               .szTip = "Virtual Runner 1.4" & vbNullChar
           End With
           Shell_NotifyIcon NIM_ADD, nid
        End sub



        Эта процедура юзается мастдаем, т.к. uCallBackMessage = WM_MOUSEMOVE

        Private Sub Form_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
        Dim Result As Long
        Dim Msg As Long
        If Me.ScaleMode = vbPixels Then
         Msg = x
         Else:
         Msg = x / Screen.TwipsPerPixelX
        End If

        Select Case Msg
         Case WM_LBUTTONDBLCLK
           Me.WindowState = vbNormal
           Me.Show
           Result = SetForegroundWindow(Me.hwnd)
         Case WM_RBUTTONUP
           myMenu.ShowMenu
        End Select
           
        End Sub

        В проекте подключена библиотека mymenu.dll. Если знаешь VB - библиотеки ActiveX, а не API. Вот отрывок процедуры Showmenu() этой библиотеки:

        public sub Showmenu()
        Load frmMenu
        frmMenu.Move X, Y
        SetWindowPos frmMenu.hwnd, HWND_TOPMOST, frmMenu.Left / 15, _
                    frmMenu.Top / 15, frmMenu.Width / 15, _
                    frmMenu.Height / 15, SWP_NOACTIVATE Or SWP_SHOWWINDOW

        SetCapture frmMenu.hwnd

        frmMenu.Show

        While Not MenuClosed = True: DoEvents
        Wend

        If haveSelected = True Then
           RaiseEvent ItemClick(mySelected.Index, mySelected.Key)
        End If
        end sub

        Так вот видишь, SetCapture устанавливается. Если не знаешь её действие, то на frmMenu будет вызвана процедура form_mouseup, при соответствующих действиях.
        Так если у меня вызвана Showmenu() и показывается меню, то если пошевелить крысой в таскбаре над иконкой этой проги, SetCapture сбрасывается, причём процедура form_mouseup не вызывается! Таким образом эффект как от ReleaseCapture, что никому не нужно!
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0210 ]   [ 16 queries used ]   [ Generated: 3.05.24, 08:48 GMT ]