Page 1 of 1

[WinAPI] Ce este o fereasta "child"?

Posted: 31 Jan 2010, 14:34
by Ovidiu Cucu
Q: Ce este o fereasta child?

A: O fereastra child (copil) este o fereastra care are setat stilul WS_CHILD si are urmatoarele proprietati:
  • are o fereastra parent (parinte);
  • sta intotdeauna in zona client a ferestrei parinte (nu poate fi afistata in afara);
  • daca fereastra parinte este mutata, fereastra copil este mutata in acelas fel (pozitia ei relativa la zona client a parintelui nu se schimba);
  • este distrusa atunci cand se distruge fereastra parinte.
Note
  • pentru a crea o fereasta child, trebuie setat stilul WS_CHILD si pasat un handle la parinte in apelul functiei CreateWindow sau CreateWindowEx;
    Exemplu

    Code: Select all

    // create a child window
    HWND hWndChild = CreateWindow(_T("BUTTON"), _T("Push"),
                                  WS_VISIBLE|WS_BORDER|WS_CHILD, // WS_CHILD style is set
                                  5, 6, 80, 30,
                                  hWndParent,                    // parent window handle
                                 (HMENU)1999, hInstance, NULL);
  • De obicei, pozitia unei ferestre copil este relativa la zona client a parintelui;
    in exemplul anterior 5 si 6 sunt coordonatele x si y relative la coltul stanga-sus a zonei client a ferestrei parinte;.
    Alte exemple

    Code: Select all

    // moves a child window
    MoveWindow(hWndChild, 
               98, 99, // coordinates relative to parent client area
               80, 30, TRUE);

    Code: Select all

    // moves a child window
    SetWindowPos(hWndChild, NULL, 
                 98, 99, // coordinates relative to parent client area
                 0, 0, SWP_NOSIZE|SWP_NOZORDER);
  • frame-urile MDI child sunt tot ferestre copil si au setat in plus stilul extins WS_EX_MDICHILD;
  • WS_CHILDWINDOW si WS_CHILD sunt sinonime;
  • in general, controalele (butoane, edit-uri etc) sunt ferestre copil;
  • o fereastra child nu poate avea menu;
  • toate ferestrele care nu au setat stilul WS_CHILD (deci nu sunt child) sunt ferestre top-level;
  • nu confundati child cu ownedl; chiar daca o fereastra owned are un parent (mai binezis un owner), ea nu are setat stilul WS_CHILD.
Vezi si
<< Back to Windows API Index