Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > MessageBox тупит


Автор: shapka1ushanka 24.3.2010, 02:31
привет

есть api приложение с главной формой на основе диалога из ресурса.

Код

MessageBox(0,'test1','test1',MB_OK or MB_ICONINFORMATION);
hMainWindow:=CreateDialog(hInstance,PChar('DIALOG_0'),0,@WindowProc);
MessageBox(0,'test2','test2',MB_OK or MB_ICONINFORMATION);


первый messagebox работает как надо, а второй появляется, но не реагирует на нажатие кнопок, то есть закрыть его не получается.
в чем может быть проблема?
спасибо.

Автор: Rennigth 24.3.2010, 07:45
а что у тебя в WindowProc?

Автор: shapka1ushanka 24.3.2010, 16:55
Код

begin
  Result := DefWindowProc(hwnd, msg, wparam, lparam);
  case Msg of
    WM_INITDIALOG: begin
      ShowWindow(hWnd,SW_SHOWMAXIMIZED);
    end;
    WM_COMMAND: begin
      case LoWord(wParam) of
        1:
          if HiWord(wParam) = bn_Clicked then ShutDown;
        2:
          if HiWord(wParam) = bn_Clicked then ShutDown;
        10:
          if HiWord(wParam) = bn_Clicked then
              messagebox(0,'test5','test5',MB_OK); // тоже появляется, но не работает
      end;
    end;
  end;
end;

Автор: CodeMonkey 24.3.2010, 18:43
(наугад) Как выглядит цикл выборки сообщений?

Автор: shapka1ushanka 24.3.2010, 20:08
пробовал 
Код

while GetMessage(Msg, 0, 0, 0) do begin
    if hMainWindow<>0 then
      if not IsDialogMessage(hMainWindow,Msg) then begin
        TranslateMessage(Msg);
        DispatchMessage(Msg);
      end;
  end;


и 

Код

while GetMessage(Msg, 0, 0, 0) do begin
        TranslateMessage(Msg);
        DispatchMessage(Msg);
  end;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)