[Back to WIN-OS2 SWAG index] [Back to Main SWAG index] [Original]
program MDITemplate;
{$X+,S+,R+}
{$B-}   {*** This compiler directive should stay ***}
{$R MDIPLATE}
{ the res file contains this :
MDIMENU MENU
BEGIN
	POPUP "MDI Children"
	BEGIN
		MENUITEM "Create", 24339
		MENUITEM "&Cascade", 24337
		MENUITEM "&Tile", 24336
		MENUITEM "Arrange &Icons", 24335
		MENUITEM "C&lose All", 24338
	END
END
}
uses WinTypes, WinProcs, OWindows, ODialogs, Strings;
type
  PMyApp = ^TMyApp;
  TMyApp = object(TApplication)
    function ProcessAppMsg(var Message: TMsg): Boolean; virtual;
    procedure InitMainWindow;  virtual;
  end;
  PMyMDIWin = ^TMyMDIWin;
  TMyMDIWin = object(TMDIWindow)
    function InitChild: PWindowsObject; virtual;
    procedure InitClientWindow; virtual;
  end;
  PMyMDIChild = ^TMyMDIChild;
  TMyMDIChild = object(TWindow)
    constructor Init(AParent: PWindowsObject; ATitle: PChar);
    procedure wmMDIActivate(var Msg: TMessage);
      virtual wm_First + wm_MDIActivate;
    procedure wmSetFocus(var Msg: TMessage);
      virtual wm_First + wm_SetFocus;
  end;
  PMyClient = ^TMyClient;
  TMyClient = object(TMDIClient)
  end;
function TMyApp.ProcessAppMsg(var Message: TMsg): Boolean;
begin
  ProcessAppMsg :=
    ProcessMDIAccels(Message) or
    ProcessAccels(Message) or
    ProcessDlgMsg(Message);
end;
procedure TMyMDIChild.wmMDIActivate(var Msg: TMessage);
begin
  Application^.SetKBHandler(@Self);
  DefWndProc(Msg);
end;
procedure TMyMDIChild.wmSetFocus(var Msg: TMessage);
begin
  Application^.SetKBHandler(@Self);
  DefWndProc(Msg);
end;
constructor TMyMDIChild.Init(AParent: PWindowsObject; ATitle: PChar);
var
  PB: PButton;
begin
  TWindow.Init(AParent, Atitle);
  EnableKBHandler;
  PB :=new(PButton, init(@self, 200, 'OK', 10, 10, 100, 40, false));
  PB :=new(PButton, init(@self, 201, 'Not OK', 10, 60, 100, 40, false));
end;
function TMyMDIWin.InitChild: PWindowsObject;
begin
  InitChild := new(PMyMDIChild, Init(@self, 'Untitled Window'));
end;
procedure TMyMDIWin.InitClientWindow;
begin
  ClientWnd := new(PMyClient, init(@self));
end;
procedure TMyApp.InitMainWindow;
begin
  MainWindow := new(PMyMDIWin, Init('MDI Demo',
                    LoadMenu(HInstance, 'MDIMenu')));
end;
var
  MyApp: TMyApp;
begin
  MyApp.Init('MyApp');
  MyApp.Run;
  MyApp.Done;
end.
[Back to WIN-OS2 SWAG index] [Back to Main SWAG index] [Original]