Contents
Previous
Next
This >chapter >will >teach >you >the >basics >of >
compiling >programs >that >use > FLTK. >
All >public >symbols >in >FLTK >start >with >the >
characters >'F' >and >'L': >
- Functions >are >either >Fl::foo()> or >
fl_foo()>. >
- Class >and >type >names >are >capitalized: >Fl_Foo>
. >
- Constants >and >
enumerations> are > uppercase: >FL_FOO>. >
- All >header >files >start >with ><FL/...>>. >
The >proper >way >to >include >FLTK >header >files >
is: >
>#include <FL/Fl_xyz.H>
>
Microsoft >Windows >developers >please >note:> case >
*is* >significant > under >other >operating >systems, >and >
the >C >standard >uses >the >forward > slash >(/) >to >
separate >directories. > Do >not >do >any >of >the >
following:>
>#include <FL\Fl_xyz.H>
>#include <fl/fl_xyz.h>
>#include <Fl/fl_xyz.h>
>
Under >UNIX >(and >under >Microsoft >Windows >when >
using >the >GNU >development > tools) >you >will >
probably >need >to >tell >the >compiler >where >to >
find >the > header >files. >This >is >usually >done >
using >the >-I> option: >
>CC -I/usr/local/include ...
>gcc -I/usr/local/include ...
>
Similarly, >when >linking >your >application >you >will >
need >to >tell >the > compiler >to >use >the >FLTK >
library: >
>CC ... -L/usr/local/lib -lfltk -lXext -lX11 -lm
>gcc ... -L/usr/local/lib -lfltk -lXext -lX11 -lm
>
In >Visual >C++ >you >will >need >to >tell >the >
compiler >where >to >find >the > FLTK >header >files. >
This >can >be >done >by >selecting >"Settings" >from >
the > "Project" >menu >and >then >changing >the >
"Preprocessor" >settings >under >the > "C/C++" >tab. >You >
will >also >need >to >add >the >FLTK >and >WinSock >
(WSOCK32.LIB) >libraries >to >the >"Link" >settings. >
You >can >build >your >Microsoft >Windows >applications >
as >Console >or > WIN32 >applications. > If >you >want >
to >use >the >standard >C >main()> function >as >
the >entry >point, >FLTK >includes >a >WinMain()>
function >that >will >call >your >main()>
function >for >you. >
Note: >The >Visual >C++ >5.0 >optimizer >is >known >
to >cause >problems >with > many >programs. > We >only >
recommend >using >the >"Favor >Small >Code" > optimization >
setting.> The >Visual >C++ >6.0 >optimizer >seems >to >
be >much >better >and >can >be >used >with >the >
"optimized >for >speed" >setting.>
All >programs >must >include >the >file ><FL/Fl.H>>
. >In >addition >the > program >must >include >a >
header >file >for >each >FLTK >class >it >uses. >
Listing >1 >shows >a >simple >"Hello, >World!" >program >
that >uses >FLTK >to > display >the >window. >
>#include <FL/Fl.H>
>#include <FL/Fl_Window.H>
>#include <FL/Fl_Box.H>
>
>int main(int argc, char **argv) {
> Fl_Window *window = new Fl_Window(300,180);
> Fl_Box *box = new Fl_Box(20,40,260,100,"Hello, World!");
> box->box(FL_UP_BOX);
> box->labelsize(36);
> box->labelfont(FL_BOLD+FL_ITALIC);
> box->labeltype(FL_SHADOW_LABEL);
> window->end();
> window->show(argc, argv);
> return Fl::run();
>}
>
After >including >the >required >header >files, >the >
program >then >creates >a > window: >
>Fl_Window *window = new >Fl_Window>(300,180);
>
and >a >box >with >the >"Hello, >World!" >string >in >
it: >
>Fl_Box *box = new >Fl_Box>(20,40,260,100,"Hello, World!");
>
Next, >we >set >the >type >of >box >and >the >size, >
font, >and >style >of >the >label: >
>box->box(FL_UP_BOX);
>box->>labelsize>(36);
>box->>labelfont>(FL_BOLD+FL_ITALIC);
>box->>labeltype>(FL_SHADOW_LABEL);
>
Finally, >we >show >the >window >and >enter >the >FLTK >
event >loop: >
>window->>end>();
>window->>show>(argc, argv);
>return >Fl::run>();
>
The >resulting >program >will >display >the >window >
below. >You >can >quit >the > program >by >closing >the >
window >or >pressing >the >ESCape >key. >
Creating >the >Widgets>
The >widgets >are >created >using >the >C++ >new>
operator. > For > most >widgets >the >arguments >to >the >
constructor >are: >
>Fl_Widget(x, y, width, height, label)
>
The >x> and >y> parameters >determine >
where >the >widget > or >window >is >placed >on >the >
screen. >In >FLTK >the >top >left >corner >of >the >
window >or >screen >is >the >origin >(i.e. >x >= >0, >
y >= >0) >and >the >units >are >in > pixels. >
The >width> and >height> parameters >
determine >the >size > of >the >widget >or >window >in >
pixels. > The >maximum >widget >size >is > typically >
governed >by >the >underlying >window >system >or >
hardware. >
label> is >a >pointer >to >a >character >
string >to >label >the >widget >with >or >NULL>
. >If >not >specified >the >label >defaults >to >
NULL>. > The >label >string >must >be >in >static >
storage >such >as >a >string >constant >because >FLTK >
does >not >make >a >copy >of >it >- >it >just >uses >
the >pointer. >
Get/Set >Methods>
box->box(FL_UP_BOX)> sets >the >type >of >box >
the >Fl_Box >draws, >changing >it >from >the >default >
of >FL_NO_BOX>, >which >means > that >no >box >
is >drawn. >In >our >"Hello, >World!" >example >we >use >
FL_UP_BOX>, >which >means >that >a >raised >button >
border >will >be >drawn > around >the >widget. > You >
can >learn >more >about >boxtypes >in >
Chapter >3>. >
You >could >examine >the >boxtype >in >by >doing >
box->box()>. > Fltk >uses >method >name >overloading >
to >make >short >names >for >get/set >methods. > A >
"set" >method >is >always >of >the >form >
"void name(type)", >and >a >"get" >method >is >always >
of >the >form >"type name() const". >
Redrawing >After >Changing >Attributes>
Almost >all >of >the >set/get >pairs >are >very >
fast, >short >inline >functions >and >thus >very >
efficient. > However, >the >"set" >methods >do >not >
call >redraw()> - >you >have >to >call >it >
yourself. > This >greatly >reduces >code >size >and >
execution >time. > The >only >common >exception >is >
value()> which >calls >redraw()> if >necessary. >
Labels>
All >widgets >support >labels. > In >the >case >of >
window >widgets, >the >label > is >used >for >the >
label >in >the >title >bar. >Our >example >program >
calls >the >
labelfont>, >
labelsize>, >and >
labeltype> methods. >
The >labelfont> method >sets >the >typeface >
and >style >that >is > used >for >the >label, >which >
for >this >example >we >are >using >FL_BOLD> and >
FL_ITALIC>. > You >can >also >specify >typefaces >
directly. >
The >labelsize> method >sets >the >height >of >
the >font >in >pixels. >
The >labeltype> method >sets >the >type >of >
label. > FLTK >supports > normal, >embossed, >shadowed, >
symbol, >and >image >labels >internally, >and >more >
types >can >be >added >as >desired. >
A >complete >list >of >all >label >options >can >be >
found >in > Chapter >3>. >
Showing >the >Window>
The >show()> method >shows >the >widget >or >
window. > For >windows > you >can >also >provide >the >
command-line >arguments >to >allow >users >to > customize >
the >appearance, >size, >and >position >of >your >
windows. >
The >Main >Event >Loop>
FLTK >provides >the >Fl:run()>
method >to >enter >a >standard >event >processing >
loop. > This >is >equivalent > to >the >following >code: >
>while (Fl::wait());
>
Fl::run()> does >not >return >until >all >of >
the >windows >under >FLTK > control >are >closed >by >
the >user >or >your >program. >
Contents
Previous
Next
No comments for this page.
|