Amiga Dünyası sayı 31, sayfa 11

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 11

a

struct İntuitionBase *IntuitionBase; struct Window *Window;

main() | IntuitionBa: ruct İntuitionBase * ) OpenLibrary("intuition.library",0);

if(!IntuitionBase) | printf("Intuition return(0);

if(lcreate window()) | printf("Window acilamadi!."); ) else | Delay(100);

if(Window) Close Window(Window); if(IntuitionBase) CloseLibrary(Intui- tionBase);

create window() struct New Window New Window;

NewWindow,LeftEdge—20; NewWindow. NewWindow.Heighi NewWindow.DetailPen-0; NewWindow.BlockPen-1; NewWindow.Titlezi (UBYTE *)"Basit bir Window"; NewWindow.FlagszACTIVATE; NewWindow.IDCMPFlagsz0; NewAVindow.Type-WBENCHSCREEN; NewWindow.CheckMark-NULL;

NewWindow.MinWidth: NewWindow.MinHeight NewWindow.Max Width: NewWindow.MaxHeight-0;

Windowzistruct Window *) OpenWindow(&NewWindow);

return(0);

Yukarıdaki örneğimizde create_window() adı altında bir window açma rutini hazırladım. Bu rutini çağırdığımızda, NewWindow yapı değişkenine istenilen özellikler verilerek Window açılıyor. Vermiş olduğumuz parametreleri bir inceleyelim. Title, bir string dizi istiyor. Daha sonra ekran açıldığında bu diziyi window'un tepesindeki bara başlık olarak atıyor. Örneğimizde "Basit bir Window" dizisini kullandık. Type'ı WBENCHSCREEN olarak aldık. Böylece window 640x200'lük screen'de açılacak.

DetailPen ve BlockPen, renk registerlerini oluşturuyor. DetailPen, yazı ve window'un çerçeve rengini tutuyor. BlockPen, arka fon rengini tutuyor. Bu değişkenlere -1 değerini verirsek, screen'in seçmiş olduğu DetailPen ve BlockPen değerlerini kullanmış oluyoruz. Flags değişkeni, çok önemli ve dikkatli olunması gereken bir değişken. Biz burada ACTIVATE parametresini kullandık. Bu sayede window açılır açılmaz aktive edilecektir. Yani, eğer bir giriş yapılacaksa bu window'dan al anlamına gelmektedir. LeftEdge ve TopEdge sol üst noktamızdı. Bu değişkenleri de 20-20 seçtik. Genişlik ise Height-100, Diğer yapı değişkenlerini kullanmadığımız için 0 veya NULL olarak eşitledik. Böylece bu değişkenlerin yapmış olduğu işlevler ihmal edilmiş oluyor. Flag olarak ACTIVATE'i seçmiştik. Şimdi diğer flag'lara ve ne anlama geldiğini öğrenelim.

Window Flags:

ACTIVATE Window açılır açılmaz diğer Window'lara göre aktif olarak açılır. ACTIVEWINDOW Window açıldıktan sonra eğer window aktif ise mesaj al. BACKDROP Window'ların arkasında açılmasını sağlar. BORDERLESS Özel pencereye çerçeve çizmez. INACTIVEWINDOW Window açıldıktan sonra aktif değilse bile mesaj al. NOCAREREFRESH Window'da bir değişiklik yapılsa bile değişiklikleri tazeleme. REPORTMOUSE Mouse hareketlerini kontrol edilebilir yap. SIMPLE_REFRESH Window'da bir değişiklik yapıldığında değişikliği yeniden tazele. SMART_REFRESH Window'da meydana gelen değişikliği otomatik olarak tazele. SUPER_BITMAP Kullanıcının istediği hafıza bölgesini kullan.

olarak açılan

Yukarıdaki flag'ları kullanarak istediğiniz window'u deneyin. Son bir örnekle yazımızı bitirelim. Bu örnekte, üç adet Window açıyoruz. Açılan window'lara değişik isimler attım. Ayrıca create_window() rutinimizi de biraz geliştirdim.

#include <stdio.h> #include <exec/types.h> #include <intuition/intuitionbase.h>

struct İntuitionBase *IntuitionBase; struct Window *Win0,*Win1,*Win2;

SHORT x,y; UBYTE name|20);

IntuitionBase—(struct IntuitionBase *) Openl ibrary("intuition.library",0);

if(!IntuitionBase) (| printf("Intuition return(0);

|

strepy(name,"Window 0"); Win0z(struct Window *) create win- dow(x,y,name);

strepy(name,”"Window 1"); Window *) create win- dow(x,y.name);

strepy(name," "Window 2"); Window *) create window(x,y,name);

Delay(100); if(Win0) Close Window(Win0); Delay(100); if(Win1) Close Window(Win 1); Delay(100); if(Win2) Close Window(Win2);

if(IntuitionBase) tionBase);

CloseLibrary(Intui-

create window(x,y,name) SHORT x,y; UBYTE *name;

struct NewWindow

NewWindow.LeftEdge—x; NewWindow. TopEdge:

100; NewWindow.Titlezname; NewWindow.FlagssACTIVATE; NewWindow.IDCMPFlagsz0; NewWindow.FirstGadget-NULL; NewWindow.CheckMark-NULL; NewWindow.Screen-NULL; ULL;

NewWindow.MaxHeight-0;

Programı yazıp çalıştırdığınızda arka arkaya üç adet window açılacak. Daha sonra belirli aralıklarla window'lar teker teker kapanacaktır. Compile ve Link işlemlerini, Aztec 3.6'da -> CC c.c, LN c.o -lc32 Aztec 5.0'da -> CC c.c -3 41, LN c.o -lcl olarak yapabilirsiniz. Gelecek ay kaldığımız yerden devam edeceğiz. Şimdilik hepinize iyi çalışmalar...

Klavyeyle gezinmek için ← ve → tuşları.