Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.218.196.182] |
|
Сообщ.
#1
,
|
|
|
Вообщем сообщения перебивают друг друга, серьёзно!
Я юзаю Shell_NotifyIcon, в которой uCallBackMessage принимает значение WM_MOUSEMOVE. Так вот: при щелчке на иконке в баре у меня вызывается SetCapture (для самопального меню, вообщем). Так после движения крысой по иконке, SetCapture сбрасывается, т.е. эффект как от ReleaseCapture!!! Ну кому такое нужно? Если не понятно - объясняю на пальцах: менюшка открывается, да вот не будет закрываться, бекоз SetCapture уже не действует Использую VB 6.0. Для Shell_NotifyIcon сервак сообщений вызывает процедуру FORM_MOUSEMOVE, где и идёт обработка сообщения. Для SetCapture - FORM_MOUSEUP другой формы. Но если будет ещё хоть одна мессага от таскбара, то капча уже не действует! |
Сообщ.
#2
,
|
|
|
ты код покажи..
|
Сообщ.
#3
,
|
|
|
Все юзается на 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, что никому не нужно! |