Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.05.16;
Скачать: [xml.tar.bz2];

Вниз

Сообщения PopupMenu   Найти похожие ветки 

 
i-s-v   (2004-03-31 00:22) [0]

Подскажите, плз, какое сообщение отправляет попап-меню окну при исчезновении???


 
unya   (2004-03-31 00:41) [1]

А нафига?


 
Игорь Шевченко ©   (2004-03-31 00:51) [2]

При выборе команды - WM_COMMAND, просто при закрытии (мышкой вне меню кликнули) - никакого


 
nikkie ©   (2004-03-31 01:38) [3]

а как же WM_EXITMENULOOP?

WM_COMMAND, кстати, может и не посылаться (TPM_NONOTIFY)


 
Игорь Шевченко ©   (2004-03-31 10:27) [4]

nikkie ©   (31.03.04 01:38)

Как ни странно, я перед тем, как ответить (первая мысль тоже была про WM_EXITMENULOOP) написал мелкое приложение (форму с PopupMenu) и пропустил ее через Spy++, WM_EXITMENULOOP в списке сообщений не оказалось :(

Может, я чего не так делал ?
Правда, само сообщение на форме я не ловил. Попробуешь ?


 
nikkie ©   (2004-03-31 23:43) [5]

форма с PopupMenu - полностью VCL, я так понял? насколько мне помнится, TPopupMenu создает невидимое окно. наверное ты не на то окно смотрел.

я попробовал на программе использующей TrackPopupMenu, в которой я 100% знаю какой передается hwnd - вижу сообщения WM_ENTERMENULOOP, WM_EXITMENULOOP. отображаются они, правда, странненько (см. лог ниже). точки такие я первый раз увидел, что они обозначают не знаю. такое ощущение, что пытаются передать какой-то уровень вложенности. почему они сдвигаются - совсем непонятно. действия мои были такие:
1) открыл popup menu
2) закрыл popup menu, кликнув мимо
3) открыл popup menu
4) закрыл popup menu, кликнув кликнув по menu item
5) открыл main menu
6) закрыл main menu, кликнув мимо
7) открыл main menu
8) закрыл main menu, кликнув кликнув по menu item

<00001> 000905B0 S ........................................................................................................................ .......WM_ENTERMENULOOP fIsTrackPopupMenu:True
<00002> 000905B0 R ........................................................................................................................ .......WM_ENTERMENULOOP
<00003> 000905B0 S ........................................................................................................................ .............................WM_EXITMENULOOP fIsTrackPopupMenu:True
<00004> 000905B0 R ........................................................................................................................ .............................WM_EXITMENULOOP
<00005> 000905B0 S ........................................................................................................................ ..................................WM_ENTERMENULOOP fIsTrackPopupMenu:True
<00006> 000905B0 R ........................................................................................................................ ..................................WM_ENTERMENULOOP
<00007> 000905B0 S ........................................................................................................................ ............................................................................WM_EXITMENULOOP fIsTrackPopupMenu:True
<00008> 000905B0 R ........................................................................................................................ ............................................................................WM_EXITMENULOOP
<00009> 000905B0 P WM_COMMAND wNotifyCode:0 (sent from a menu) wID:40010
<00010> 000905B0 S ........................................................................................................................ ...........................................................................WM_ENTERMENULOOP fIsTrackPopupMenu:False
<00011> 000905B0 R ........................................................................................................................ ...........................................................................WM_ENTERMENULOOP
<00012> 000905B0 S ........................................................................................................................ ........................................................................................................................ ..........................................................................WM_EXITMENULOOP fIsTrackPopupMenu:False
<00013> 000905B0 R ........................................................................................................................ ........................................................................................................................ ..........................................................................WM_EXITMENULOOP
<00014> 000905B0 S ........................................................................................................................ ........................................................................................................................ ..........................................................................WM_ENTERMENULOOP fIsTrackPopupMenu:False
<00015> 000905B0 R ........................................................................................................................ ........................................................................................................................ ..........................................................................WM_ENTERMENULOOP
<00016> 000905B0 S ........................................................................................................................ ........................................................................................................................ ........................................................................................................................ ....WM_EXITMENULOOP fIsTrackPopupMenu:False
<00017> 000905B0 R ........................................................................................................................ ........................................................................................................................ ........................................................................................................................ ....WM_EXITMENULOOP
<00018> 000905B0 P WM_COMMAND wNotifyCode:0 (sent from a menu) wID:40005


 
Игорь Шевченко ©   (2004-04-01 01:29) [6]

nikkie ©   (31.03.04 23:43)

Точно, спасибо за напоминание про невидимое окно. Действительно, этому окну посылается WM_EXITMENULOOP, пришлось небольшую программку написать.
unit main;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Menus;

type
 TfMain = class(TForm)
   PopupMenu1: TPopupMenu;
   Item11: TMenuItem;
   N1: TMenuItem;
   Exit1: TMenuItem;
   procedure Exit1Click(Sender: TObject);
 end;

var
 fMain: TfMain;

implementation
uses
 HSHookUtils; { Для определения имени сообщения по его коду }

{$R *.dfm}

type
 THSPopupList = class(TPopupList)
 protected
   procedure WndProc(var Message: TMessage); override;
 end;

procedure TfMain.Exit1Click(Sender: TObject);
begin
 Close;
end;

{ Utility }

var
 F: TextFile;

procedure LogMessage(const Message: TMessage);
var
 FileName: string;
begin
 FileName := ChangeFileExt(Application.ExeName, ".log");
 AssignFile(F, FileName);
 if FileExists(FileName) then
   Append(F)
 else
   Rewrite(F);
 writeln(F, Format("%s (%.8x, %.8x)", [MsgName(Message.Msg),
   Message.WParam, Message.lParam]));
 CloseFile(F);
end;

{ THSPopupList }

procedure THSPopupList.WndProc(var Message: TMessage);
begin
 LogMessage(Message);
 inherited;
end;

initialization
 PopupList.Free; { Уничтожим системный экземпляр класса }
 PopupList := THSPopupList.Create; { И создадим свой PopupList, протоколирующий сообщения }
end.


И вот что в протоколе оказалось:
WM_ACTIVATEAPP (00000001, 00000260)
WM_ENTERMENULOOP (00000001, 00000000)
WM_SETCURSOR (00040188, 00000002)
WM_INITMENU (01CD01AB, 00000000)
WM_INITMENUPOPUP (01CD01AB, 00000000)
WM_ENTERIDLE (00000002, 00050194)
...
WM_ENTERIDLE (00000002, 00050194)
WM_MENUSELECT (80800001, 01CD01AB)
WM_ENTERIDLE (00000002, 00050194)
...
WM_ENTERIDLE (00000002, 00050194)
WM_CAPTURECHANGED (00000000, 00000000)
WM_UNINITMENUPOPUP (01CD01AB, 00000000)
WM_MENUSELECT (FFFF0000, 00000000)
WM_EXITMENULOOP (00000001, 00000000)
WM_COMMAND (00000001, 00000000)
WM_ENTERMENULOOP (00000001, 00000000)
WM_SETCURSOR (00040188, 00000002)
WM_INITMENU (01CD01AB, 00000000)
WM_INITMENUPOPUP (01CD01AB, 00000000)
WM_ENTERIDLE (00000002, 00060194)
...
WM_ENTERIDLE (00000002, 00060194)
WM_CAPTURECHANGED (00000000, 00000000)
WM_UNINITMENUPOPUP (01CD01AB, 00000000)
WM_MENUSELECT (FFFF0000, 00000000)
WM_EXITMENULOOP (00000001, 00000000)
WM_ENTERMENULOOP (00000001, 00000000)
WM_SETCURSOR (00040188, 00000002)
WM_INITMENU (01CD01AB, 00000000)
WM_INITMENUPOPUP (01CD01AB, 00000000)
WM_ENTERIDLE (00000002, 00070194)
...
WM_ENTERIDLE (00000002, 00070194)
WM_MENUSELECT (80800001, 01CD01AB)
WM_ENTERIDLE (00000002, 00070194)
...
WM_ENTERIDLE (00000002, 00070194)
WM_MENUSELECT (88030002, 01CD01AB)
WM_ENTERIDLE (00000002, 00070194)
...
WM_ENTERIDLE (00000002, 00070194)
WM_MENUSELECT (80800003, 01CD01AB)
WM_ENTERIDLE (00000002, 00070194)
...
WM_ENTERIDLE (00000002, 00070194)
WM_CAPTURECHANGED (00000000, 00000000)
WM_UNINITMENUPOPUP (01CD01AB, 00000000)
WM_MENUSELECT (FFFF0000, 00000000)
WM_EXITMENULOOP (00000001, 00000000)
WM_COMMAND (00000003, 00000000)
WM_ACTIVATEAPP (00000000, 00000260)
WM_DESTROY (00000000, 00000000)
WM_NCDESTROY (00000000, 00000000)


Точками отмечены повторяющиеся сообщения WM_ENTERIDLE



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.05.16;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.063 c
14-1082986341
Карелин Артем
2004-04-26 17:32
2004.05.16
Посоветуйте гамалку - драку реактивную.


1-1083071494
Talle
2004-04-27 17:11
2004.05.16
Вывести на экран текст с формулами


1-1083163410
KillOfCats
2004-04-28 18:43
2004.05.16
Работа с файлами


8-1077452218
Cerber
2004-02-22 15:16
2004.05.16
OpenGL


4-1080639896
DennisLNC
2004-03-30 13:44
2004.05.16
Перерисовка





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский