Path: utzoo!mnetor!uunet!husc6!bbn!rochester!PT.CS.CMU.EDU!andrew.cmu.edu!bader+ From: bader+@andrew.cmu.edu (Miles Bader) Newsgroups: comp.windows.misc Subject: Re: Does anyone really understand windows? Message-ID: Date: 16 Feb 88 23:30:59 GMT References: <1457@sugar.UUCP> Organization: Carnegie Mellon University Lines: 156 In-Reply-To: <1457@sugar.UUCP> Here's a program for the "Andrew Toolkit" that displays helloworld in a window... Note that it (like the Xtk version in David Rosenthal's paper) isn't a good example if you want to do more than use pre-existing views & dataobjects or combinations thereof (but see the second version later in this message). /* --------------- start file hwapp.H --------------- */ class hwapp : application{ overrides: Start() returns boolean; }; /* --------------- end file hwapp.H --------------- */ /* --------------- start file hwapp.c --------------- */ #include #include "hwapp.eh" #include "im.ih" #include "text.ih" #include "textview.ih" boolean hwapp__Start(self) struct hwapp *self; { struct text *t; struct textview *tv; struct im *im; if(!super_Start(self)) return FALSE; t=text_New(); if(t==NULL) return FALSE; text_InsertCharacters(t,0,"Hello world!",sizeof("Hello world!")-1); tv=textview_New(); if(tv==NULL){ text_Destroy(t); return FALSE; } textview_SetDataObject(tv,t); im=im_Create(NULL); /* an im is effectively a window */ if(im==NULL){ text_Destroy(t); textview_Destroy(tv); return FALSE; } im_SetView(im,tv); return TRUE; } /* --------------- end file hwapp.c --------------- */ To compile it, I type: class -I/usr/andy/include/be2 hwapp.H cc -c -I/usr/andy/include -I/usr/andy/include/be2 hwapp.c makedo hwapp.o And to run it: runapp hwapp or alternatively: ln -s /usr/andy/bin/runapp hw hw Here's the same program, but using a custom view: First, the driver: /* --------------- start file hwapp.H --------------- */ class hwapp : application{ overrides: Start() returns boolean; }; /* --------------- end file hwapp.H --------------- */ /* --------------- start file hwapp.c --------------- */ #include #include "hwapp.eh" #include "im.ih" #include "helloworld.ih" boolean hwapp__Start(self) struct hwapp *self; { struct helloworld *hw; struct im *im; if(!super_Start(self)) return FALSE; hw=helloworld_New(); if(hw==NULL) return FALSE; im=im_Create(NULL); if(im==NULL){ helloworld_Destroy(hw); return FALSE; } im_SetView(im,hw); return TRUE; } /* --------------- end file hwapp.c --------------- */ Now, the view: /* --------------- start file helloworld.H --------------- */ class helloworld : view { overrides: FullUpdate(enum view_UpdateType type, long left, long top, long width, long right); }; /* --------------- end file helloworld.H --------------- */ /* --------------- start file helloworld.c --------------- */ #include #include "helloworld.eh" #include "graphic.ih" void helloworld__FullUpdate(hw, type, left, top, width, height) struct helloworld *hw; enum view_UpdateType type; long left; long top; long width; long height; { int x,y; struct rectangle VisualRect; helloworld_GetVisualBounds(hw,&VisualRect); x = rectangle_Left(&VisualRect) + rectangle_Width(&VisualRect)/2; y = rectangle_Top(&VisualRect) + rectangle_Height(&VisualRect)/2; helloworld_MoveTo(hw,x,y); helloworld_DrawString(hw,"hello world", graphic_BETWEENTOPANDBASELINE | graphic_BETWEENLEFTANDRIGHT); } /* --------------- end file helloworld.c --------------- */ -Miles