RicH and FamouS

       Home         Glosar IT                                                                                                                                                                                                              SUBSCRIBE NOW!
        

14.04.2009

Overlapped/popup/child/owned Windows

De mult, tare de mult, pe cand Windows-ul mai purta pampershi (in versiunile 1.x), existau doua tipuri principale de ferestre: tiled si overlapped (astea din urma, mult mai cool, in sensul ca le puteai aranja si pune una peste alta). Intre timp ferestrele tiled au disparut, nici nu se mai stie prea bine cum au fost alea, iar azi putem spune ca toate ferestrele sunt overlapped. Asta-i, cred, un motiv pentru care WS_OVERLAPPED are valoarea 0 (zero).

Cod:
// WINUSER.H
#define WS_OVERLAPPED 0x00000000L

De altfel, desi ferestrele tiled nu mai exista, totusi stilul WS_TILED n-a fost sters cu radiera si are valoarea:

Cod:
// WINUSER.H
#define WS_TILED WS_OVERLAPPED


Clar pina aici.
Acum totusi, se vorbeste intre programmerii Windows, se scrie prin manuale, de ferestre overlapped, popup, si child.

Care-i deosebirea dintre ele?
Cel mai simplu, o luam de la coada la cap:
  • 3. child windows
    - sunt alea care au stilul WS_CHILD; principala lor proprietate e ca nu pot exista decat in zona client al unei ferestre parinte; child sunt de cele mai multe ori controalele (buton, edit, listbox, etc); toate celelalte, deci care nu sunt child, se mai numesc ferestre top-level, pot exista oriunde in ecran si sunt din categoriile de mai jos.
  • 2. popup windows
    - sunt alea care nu au stilul WS_CHILD dar au stilul WS_POPUP; se foloseste de obicei pentru ferestre de mici dimensiuni si care exista pentru scurt timp.
  • 1. overlapped windows
    - sunt alea care nu au nici stilul WS_CHILD nici stilul WS_POPUP; se foloseste de obicei ca fereastra principala a unei aplicatii; deosebirea principala intre ferestrele overlapped si popup este ca cele overlapped au intotdeauna un caption (bara de titlu) pe cand la cele popup caption-ul este optional.

In practica, aceste stiluri principale sunt utilizate in combinatie cu alte stiluri WS_BORDER, WS_CAPTION, WS_SYSMENU, etc si exista chiar definite (in WINUSER.H) stiluri "compuse" cum ar fi de exemplu:

Cod:
#define WS_OVERLAPPEDWINDOW (WS_OVERLAPPED |
WS_CAPTION |
WS_SYSMENU |
WS_THICKFRAME |
WS_MINIMIZEBOX |
WS_MAXIMIZEBOX)

#define WS_POPUPWINDOW (WS_POPUP |
WS_BORDER |
WS_SYSMENU)

Acuma, revenind la stilul WS_OVERLAPPED (cel cu valoarea zero). Cum spuneam, si asta-i o ciudatenie care trebuie tinuta minte, o fereastra cu stilul WS_OVERLAPPED "curat", adica fara WS_CAPTION si WS_BORDER are totusi un caption si un border probabil mostenire din mosi stramosi, de pe vremea cand Windows-ul purta pampershi...

A mai ramas termenul owned window.
De cele mai multe ori de foloseste in mod gresit termenul de child window in loc de owned window.
Dupa cum am mai spus, o fereastra child are setat stilul WS_CHILD iar principala sa proprietate este ca nu poate exista decat in zona client al unei ferestre parinte.
O fereastra owned, poate fi orice fereastra care este top-level (deci overlapped sau popup) dar depinde de o alta fereastra numita owner. Poate exista oriunde in ecran dar este distrusa cand este distrus ownerul si este ascunsa atunci cand ownerul este ascuns sau minimizat. De asemenea, este intotdeauna afisata in fata owner-ului.

    Blog din Moldova    FastCounter 

 
Copyright © 2008-2010 Foster1. All rights reserved.