This is made by using Computer Associates tool CA - Visual Objects. It acts just like original. Actually here is two versions first one is made by John Forsberg ( uses API interface ) and second one ( Uses VO's GUI classes made by Jari Sevòn. First one is only tested with VO 1.x, but second version works also with 2.0.
API Version:
TEXTBLOCK HELLOWIN.C -- (c) Charles Petzold, 1992 /*-------------------------------------------------------- HELLOWIN.C -- Displays "Hello, Windows" in client area (c) Charles Petzold, 1992 HELLOWIN.PRG - CA Visual Objects adaptation John Forsberg, 1994 --------------------------------------------------------*/ FUNCTION Start() STATIC szAppName := "HelloWin" AS STRING LOCAL hWnd AS WORD LOCAL msg IS _WINMSG LOCAL wndclass IS _WINWNDCLASS /* Parameters not received by VO */ LOCAL hPrevinstance := _GetPrevInst() AS WORD LOCAL hInstance := _GetInst() AS WORD LOCAL nCmdShow := _GetCmdShow() AS WORD IF hPrevInstance == 0 wndclass.style := _OR(CS_HREDRAW, CS_VREDRAW) wndclass.lpfnWndProc := @WndProc() wndclass.cbClsExtra := 0 wndclass.cbWndExtra := 0 wndclass.hInstance := hInstance wndclass.hIcon := LoadIcon (hInstance, IDI_APPLICATION) wndclass.hCursor := LoadCursor (0, IDC_ARROW) wndclass.hbrBackground := GetStockObject (WHITE_BRUSH) wndclass.lpszMenuName := "" wndclass.lpszClassName := szAppName RegisterClass (@wndclass) ENDIF hwnd := CreateWindow (szAppName, ; // window class name "The Hello Program", ; // window caption WS_OVERLAPPEDWINDOW, ; // window style CW_USEDEFAULT, ; // initial x position CW_USEDEFAULT, ; // initial y position CW_USEDEFAULT, ; // initial x size CW_USEDEFAULT, ; // initial y size 0, ; // parent window handle 0, ; // window menu handle hInstance, ; // program instance handle NULL_PTR) // creation parameters /* Not in the book. Add it if you prefer */ // if hWnd = 0 // return FALSE // endif ShowWindow (hwnd, nCmdShow) UpdateWindow (hwnd) WHILE (GetMessage (@msg, 0, 0, 0)) TranslateMessage (@msg) DispatchMessage (@msg) END /* Not in the book. Add it if you prefer */ // UnregisterClass ( szAppName, hInstance ) RETURN msg.wParam FUNCTION WndProc (hwnd AS WORD, message AS WORD, wParam AS WORD, ; lParam AS LONG) AS LONG _WINCALL LOCAL hdc AS WORD LOCAL ps IS _WINPAINTSTRUCT LOCAL rect IS _WINRECT DO CASE CASE message == WM_PAINT hdc := BeginPaint (hwnd, @ps) GetClientRect (hwnd, @rect) DrawText (hdc, "Hello, Windows!", -1, @rect, ; _OR(_OR(DT_SINGLELINE, DT_CENTER), DT_VCENTER)) EndPaint (hwnd, @ps) RETURN 0L CASE message == WM_DESTROY PostQuitMessage (0) RETURN 0L ENDCASE RETURN DefWindowProc (hwnd, message, wParam, lParam)
GUI class version:
TEXTBLOCK HELLOWIN.C -- (c) Charles Petzold, 1992 /*-------------------------------------------------------- HELLOWIN.C -- Displays "Hello, Windows" in client area (c) Charles Petzold, 1992 HELLOWIN.PRG - CA Visual Objects adaptation John Forsberg, 1994 HELLOEAS.AEF - CA Visual Objects adaptation ( Easy one ) Jari Sevon, 1995 --------------------------------------------------------*/ METHOD Start() CLASS App LOCAL oWindow AS Window oWindow := Hello{} oWindow:Show() RETURN( SELF:Exec() ) CLASS HELLO INHERIT TOPAPPWINDOW METHOD INIT(oParent) CLASS HELLO SUPER:INIT(oParent) SELF:Caption := "The Easy Hello Program" RETURN SELF METHOD EXPOSE(oExpEvent) CLASS HELLO LOCAL oPoint AS POINT LOCAL oBoundBox AS BoundingBox LOCAL oDim AS Dimension LOCAL nxWinWidth AS INT LOCAL nyWinHeight AS INT LOCAL nx AS INT LOCAL ny AS INT LOCAL cDispString := "Hello Windows !" LOCAL nxTextWidth AS INT LOCAL nyTextHeight AS INT SUPER:EXPOSE(oExpEvent) oBoundBox := SELF:CanvasArea nxWinWidth := oBoundBox:Width nyWinHeight := oBoundBox:Height oDim := SELF:SizeText(cDispString) nyTextHeight := oDim:Height nxTextWidth := oDim:Width nx := ( ( nxWinWidth - nxTextWidth ) / 2 ) ny := ( ( nyWinHeight - nyTextHeight ) / 2 ) oPoint := POINT{ nx , ny } SELF:TextPrint( cDispString , oPoint ) RETURN
submitted by: Jari.Sevon@code.pp.fi (Jari Sevón)