[Back to WIN-OS2 SWAG index]  [Back to Main SWAG index]  [Original]

{
SCOTT SAMET

> I have a program that is always an icon, but I want to add an "about"
> command to it, to display a dialog box with info on the author and
> the program. Anyone know how to do this or where info on it can be found?

All system menu commands, even those you add, are returned as wm_SysCommand
messages.  You need to check wParam to see if it's one of yours, and if not,
pass it to DefWndProc.
}

Uses
  OWindows, WinProcs, WinTypes;

Const
  cm_About = 100;

Type
  TMyApp = Object(TApplication)
    Procedure InitMainWindow; Virtual;
  end;

  PMyWin = ^TMyWin;
  TMyWin = Object(TWindow)
    Procedure SetupWindow; Virtual;
    Procedure wmSysCommand(Var Msg : TMessage);
      virtual wm_First + wm_SysCommand;
    Procedure wmQueryOpen(Var Msg : TMessage);
      virtual wm_First + wm_QueryOpen;
  end;

Procedure TMyApp.InitMainWindow;
Begin
  MainWindow := New(PMyWin, Init (Nil, 'Test Window'));
  { This gives the window a system menu with Move, Switch and Close }
  PWindow(MainWindow)^.Attr.Style := ws_Overlapped or ws_Sysmenu;
end;

Procedure TMyWin.SetupWindow;
Var
  SysMenu: hMenu;
Begin
  SysMenu := GetSystemMenu(hWindow, False);
  AppendMenu(SysMenu, mf_Separator, 0, Nil);
  AppendMenu(SysMenu, mf_String, cm_About, '&About');
end;

Procedure TMyWin.wmQueryOpen(Var Msg : TMessage);
Begin
  { This keeps the window an icon at all times }
  Msg.Result := 0;
end;

Procedure TMyWin.wmSysCommand(Var Msg : TMessage);
Begin
  Case Msg.wParam of
    cm_About :
      MessageBox(hWindow, 'About Text', 'About Box', mb_ok)
    Else
      DefWndProc (Msg);
  end;
end;

Var
  App:  TMyApp;
Begin
  CmdShow := sw_ShowMinimized;
  App.Init ('Test');
  App.Run;
  App.Done;
end.

[Back to WIN-OS2 SWAG index]  [Back to Main SWAG index]  [Original]