You can centralized your windows with the following code and put it on open event:

LONG   ll_X, ll_Y, ll_XCtr, ll_YCtr
WINDOW lWin

lWin = aw_Window.ParentWindow();

ll_XCtr = lWin.X + ( lWin.Width / 2 );
ll_YCtr = lWin.Y + ( lWin.Height / 2 );

ll_X = ll_XCtr - ( aw_Window.Width / 2 );
ll_Y = ll_YCtr - ( aw_Window.Height / 2 );

IF ll_X < 0 THEN ll_X = 0;
IF ll_Y < 0 THEN ll_Y = 0;

RETURN aw_Window.Move( ll_X, ll_Y )


For MDI child window you can use the following code:
LONG   ll_X, ll_Y, ll_XCtr, ll_YCtr
WINDOW lWin

lWin = aw_Window.ParentWindow();

IF ( ( ( lWin.WindowType = MDI! ) OR ( lWin.WindowType = MDIHelp! ) ) AND &
( aw_Window.WindowType = Child! ) ) THEN
ll_XCtr = lWin.WorkSpaceWidth() / 2;
ll_YCtr = lWin.WorkSpaceHeight() / 2;

IF lWin.WindowType = MDIHelp! THEN
ll_YCtr = ll_YCtr - 40;
END IF

ll_X = ll_XCtr - ( aw_Window.Width / 2 );
ll_Y = ll_YCtr - ( aw_Window.Height / 2 ) - 200;

IF ll_X < 0 THEN ll_X = 0;
IF ll_Y < 0 THEN ll_Y = 0;
ELSE
ll_X = aw_Window.X;
ll_Y = aw_Window.Y;
END IF

RETURN aw_Window.Move( ll_X, ll_Y )