Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

WM_MENUSELECT [D6, WinXP]


webpauk ©   (2004-07-14 20:38:00) 

Устанавливаю меню окна:
var
  MainMenu, PopGame, PopDeck: HMENU;
begin
  PopGame:=CreatePopupMenu;
  AppendMenu(PopGame, MF_STRING, 2, PChar('Новая'));
  AppendMenu(PopGame, MF_STRING, 3, PChar(Загрузить));
  AppendMenu(PopGame, MF_STRING, 4, PChar(Сохранить));
  AppendMenu(PopGame, MF_STRING, 5, PChar('Выход'));

  PopDeck:=CreatePopupMenu;
  AppendMenu(PopDeck, MF_STRING, 7, PChar('Стандарт'));
  AppendMenu(PopDeck, MF_STRING, 8, PChar('Загрузить'));

  MainMenu:=CreateMenu();
  AppendMenu(MainMenu, MF_POPUP, PopGame, PChar('Игра'));
  AppendMenu(MainMenu, MF_POPUP, PopDeck, PChar('Доска'));
  AppendMenu(MainMenu, MF_POPUP, 9, PChar('История'));

  SetMenu(MainWnd, MainMenu);


После этого ловлю сообщение:

function WindowProc(wnd: HWND; Msg: Integer; Wparam: WPARAM; Lparam: LPARAM): LRESULT; stdcall;

Begin
  case msg of
     WM_DESTROY :
     Begin
        DestroyMenu(MainMenu);
        PostQuitMessage(0);
        Exit;
     End;
     WM_CLOSE: SendMessage(wnd, WM_DESTROY, 0, 0);

     WM_MENUSELECT:
     begin
        case LOWORD(Wparam) of
           5:
           begin
              if Lparam
              SendMessage(MainWnd, WM_CLOSE, 0, 0);
           end;
        end;
     end;
  end;
end;


Проблема такая:
при наведении мыши на пункт 5, окно закрывается, хоть пункт я не нажимаю.
В чём тут дело?


NAlexey   (2004-07-15 08:50:00) [1]

>webpauk   (14.07.04 20:43) [1]
Развлекаешся?


webpauk   (2004-07-14 21:10:00) [2]

Правильно отлавливать реакцию на нажатие: WM_COMMAND


webpauk   (2004-07-14 20:43:00) [3]

Правильно читать так:
WM_MENUSELECT:
    begin
       case LOWORD(Wparam) of
          5:
          begin
             SendMessage(MainWnd, WM_CLOSE, 0, 0);
          end;
       end;
    end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо