Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Hasło jest nieopracowane
Niniejsze hasło nie zostało jeszcze opracowane. Szczegółowe informacje na temat niniejszego hasła znajdują się pod adresem strony umieszczonym w treści dokumentu. Jeżeli chciałbyś zamieścić opracowanie nieniejszego hasła w naszej dokumentacji prosimy zgłosić jego treść na forum w dziale Nowe publikacje.
Opracował: xevuel
Biblioteki C/C++

CreateWindowEx

[funkcja] Tworzy nowe okno uwzględniając rozszerzone style okien.

Składnia

C/C++
#include <windows.h>

HWND WINAPI CreateWindowEx(
DWORD dwExStyle,
LPCTSTR lpClassName,
LPCTSTR lpWindowName,
DWORD dwStyle,
int x,
int y,
int nWidth,
int nHeight,
HWND hWndParent,
HMENU hMenu,
HINSTANCE hInstance,
LPVOID lpParam
);

Argumenty

ArgumentOpis
dwExStyleRozszerzony style okna, które zostanie utworzone. Aby uzyskać listę możliwych wartości, zobacz » WinAPIRozszerzone style okien
lpClassNameCiąg znaków w stylu języka C zakończony znakiem NULL, lub klasa okna uzyskana przez poprzednie wywołania funkcji » WinAPIRegisterClass lub RegisterClassEx. Jeśli ten argument jest łańcuchem znaków, określa on nazwę klasy. Może ona zostać zarejestrowana przy użyciu » WinAPIRegisterClass lub RegisterClassEx, pod warunkiem, że moduł który zarejestrował klasę, jest również modułem, który stworzył okno. Może to być także jedna z predefiniowanych » WinAPIklas systemowych.
lpWindowNameNazwa okna. Jeżeli styl okna określa pasek tytułowy, wartość tego argumentu będzie na nim wyświetlona. Argument ten służy także do określania tekstu w kontrolkach. Podczas tworzenia kontrolki ze stylem SS_ICON, możesz użyć lpWindowName do określenia nazwy ikonki lub jej identyfikatora (składnia: "#num").
dwStyleStyle określające wygląd tworzonego okna. Ten argument może być kombinacją » WinAPIstyli okna oraz specyficznych stylów określonych dla każdej kontrolki.
xPoczątkowa pozioma pozycja okna. Dla okien zwykłych oraz pop-up, ten argument określa współrzędną x lewego górnego rogu okna, względem ekranu. Dla okien potomnych, pozycja liczona jest względem lewego górnego rogu okna nadrzędnego.

Jeżeli argument x jest równy CW_USEDEFAULT, system wybierze pozycję lewego górnego rogu okna, i zignoruje argument y. Użycie tej flagi jest poprawne tylko dla okien zwykłych. Dla okien typu pop-up oraz okien potomnych użycie jej spowoduje ustawienie współrzędnych x oraz y na wartość 0.
yPoczątkowa pionowa pozycja okna. Dla okien zwykłych oraz pop-up, ten argument określa współrzędną y lewego górnego rogu okna, względem ekranu. Dla okien potomnych, pozycja liczona jest względem lewego górnego rogu okna nadrzędnego.

Jeżeli funkcja CreateWindowEx została wywołana ze stylem WS_VISIBLE oraz z argumentem x równym CW_USEDEFAULT tworząc zwykłe okno, argument y określa, w jaki sposób zostanie ono wyświetlone. Po utworzeniu okna, zostanie wywołana funkcja » WinAPIShowWindow z argumentem nCmdShow równym SW_SHOW jeżeli argument y wynosi CW_USEDEFAULT, lub wartością tego argumentu w przeciwnym wypadku.
nWidthSzerokość okna, w jednostkach danego urządzenia względem współrzędnych ekranowych. Użycie CW_USEDEFAULT spowoduje wybranie przez system domyślnej szerokości i wysokości. Jeśli ta flaga zostanie użyta z oknami typu pop-up lub oknami potomnymi, spowoduje to przypisanie argumentom nWidth oraz nHeight wartości 0.
nHeightWysokość okna, w jednostkach danego urządzenia względem współrzędnych ekranowych. Jeżeli argument nWidth jest równy CW_USEDEFAULT, ten argument zostanie zignorowany.
hWndParentUchwyt do okna nadrzędnego. Możesz również użyć stałych HWND_DESKTOP, aby utworzyć zwykłe okno, lub HWND_MESSAGE, aby stworzyć okno do wymiany komunikatów.
hMenuUchwyt do menu dla okien zwykłych lub pop-up, albo identyfikator okna potomnego, zależnie od kontekstu. Identyfikator kontrolki jest używany, aby zawiadomić okno nadrzędne o zdarzeniach. Musi on być unikalny dla każdej kontrolki, spośród należących do danego okna nadrzędnego.
hInstanceUchwyt do instancji lub modułu, powiązanego z oknem.
lpParamWskaźnik na wartość przekazywaną jako element lpCreateParams struktury CREATESTRUCT, w komunikacie WM_CREATE (argument lParam).

Jeżeli aplikacja wywołuje funkcję CreateWindowEx w celu stworzenia okna MDI, ten argument powinien być wskaźnikiem na strukturę typu CLIENTCREATESTRUCT. Jeżeli okno MDI wywołuje tą funkcję w celu stworzenia potomnego okna MDI, powinien on być wskaźnikiem na strukturę typu MDICREATESTRUCT. Jeśli ten argument wyniesie NULL, żadne dodatkowe dane nie zostaną przekazane.

Zwracana wartość

Jeżeli wywołanie funkcji powiedzie się, zwróci ona uchwyt do nowo stworzonego okna. W przypadku błędu, zwróconą wartością będzie NULL. Aby uzyskać szczegółowe informacje o błędzie, użyj » WinAPIGetLastError.

Najczęstszymi przyczynami błędów są:
  • Użycie nieprawidłowych argumentów.
  • Klasa systemowa została zarejestrowana przez inny moduł.
  • Został założony hak WH_CBT i zwrócił kod błędu.
  • Jedna z kontrolek w szablonie dialogu nie została zarejestrowana, lub jej procedura okna zwróciła kod błędu dla wywołań komunikatów WM_CREATE lub WM_NCCREATE.

Opis szczegółowy

Funkcja CreateWindowEx tworzy nowe okno uwzględniając rozszerzone style okien. W celu jego utworzenia wysyła komunikaty WM_NCCREATE, WM_NCCALCSIZE, i WM_CREATE.

Jeżeli tworzone jest okno potomne, jego domyślną pozycją jest pierwsza od dołu w porządku Z. Jeśli tworzone jest okno zwykłe, znajduje się ono na samej górze w porządku Z, zaraz po oknach posiadających styl WS_EX_TOPMOST, chyba że tworzone okno także jest w posiadaniu tego stylu.

Aby usunąć okno, należy użyć funkcji » WinAPIDestroyWindow.

W argumencie lpClassName mogą być użyte następujące predefiniowane klasy:
KlasaZnaczenie
BUTTONOkreśla małe prostokątne okno-dziecko, które reprezentuje przycisk. Przyciski mogą występować pojedynczo lub w grupach, z tekstem, lub bez tekstu. Zazwyczaj zmieniają one wygląd, kiedy zostaną naciśnięte przez użytkownika.

» WinAPIStyle kontrolki Button.
COMBOBOXOkreśla kontrolkę zawierającą listę oraz pole wprowadzania, podobnego do kontrolki EDIT. Jeśli lista jest aktywna, wpisywanie znaków do pola wprowadzania powoduje zaznaczenie pierwszego elementu listy pasującego do tekstu wpisywanego przez użytkownika. Z kolei wybranie któregoś z elementów listy spowoduje ustawienie jego tekstu do pola wprowadzania.

» WinAPIStyle kontrolki ComboBox.
EDITOkreśla prostokątne okno-dziecko, do którego użytkownik może wprowadzać tekst. Ta kontrolka otrzymuje fokusa, gdy użytkownik kliknie na nią, lub przemieści się do niej za pomocą klawisza TAB. Po otrzymaniu fokusa, w kontrolce pojawia się migający symbol. Używając myszy można zaznaczyć tekst, lub przemieścić kursor w inne miejsce.

» WinAPIStyle kontrolki Edit.
LISTBOXOkreśla listę z ciągami znaków. Tej kontrolki należy używać, kiedy aplikacja musi zaprezentować listę nazw (takich jak np. nazwy plików), z pośród których użytkownik musi wybierać. Po kliknięciu na element listy zostaje on podświetlony, a następnie zostaje wysłane powiadomienie do okna nadrzędnego.
MDICLIENTOkreśla okno klienta MDI. To okno odbiera wiadomości, które pozwalają kontrolować okna MDI. Zalecanymi stylami są WS_CLIPCHILDREN oraz WS_CHILD. Użycie WS_HSCROLL oraz WS_VSCROLL pozwala scrollować okna wewnątrz obszaru klienta.
RichEditOkreśla kontrolkę typu RichEdit, w wersji 1.0. Kontrolka ta pozwala użytkownikowi wprowadzać tekst sformatowany. Potrafi ona również przechowywać zagnieżdżone obiekty typu COM.

» WinAPIStyle kontrolki RichEdit.
RICHEDIT_CLASSOkreśla kontrolkę typu RichEdit, w wersji 2.0. Kontrolka ta pozwala użytkownikowi wprowadzać tekst sformatowany. Potrafi ona również przechowywać zagnieżdżone obiekty typu COM.

» WinAPIStyle kontrolki RichEdit.
SCROLLBARWyznacza prostokąt, który zawiera pole przewijania oraz posiada strzałki na obu końcach. Kontrolka ta wysyła powiadomienie do okna nadrzędnego, kiedy tylko zostanie kliknięta. Okno to jest odpowiedzialne za zmianę pozycji przewijanego okna oraz za aktualizowanie pozycji paska przewijania w razie potrzeby.
STATICWyznacza proste pole tekstowe, używane do oznaczenia innych kontrolek. Kontrolka ta nie reaguje na działania użytkownika.

Użycie stylu WS_EX_NOACTIVATE w argumencie dwExStyle zapobiega aktywowaniu okna po jego utworzeniu. Aby zapobiec aktywowaniu okna po tym, jak zostało ono kliknięte przez użytkownika, należy odpowiednio obsłużyć komunikat WM_MOUSEACTIVATE. Aby przenieść okno na pierwszy plan, lub je aktywować, użyj funkcji » WinAPISetForegroundWindow lub » WinAPISetActiveWindow. Zwrócenie
false
 podczas obsługi komunikatu WM_NCACTIVATE zapobiega utracie aktywności. Wartość zwrócona jest ignorowana podczas aktywacji.

Użycie stylu WS_EX_COMPOSITED spowoduje, że wszystkie okna potomne będą rysowane z użyciem podwójnego buforowania. Rysowanie to pozwala uzyskać efekty przeźroczystości oraz przejrzystości (jeśli okno posiada styl WS_EX_TRANSPARENT), a także zapobiega migotaniu.

Wymagania

Minimalny obsługiwany klientWindows 2000 Professional
Minimalny obsługiwany serwerWindows 2000 Server
Plik nagłówkowyWinuser.h (wewnątrz Windows.h)
BibliotekaUser32.lib
DLLUser32.dll
Nazwy Unicode i ANSICreateWindowExW (Unicode) i CreateWindowExA (ANSI)

Zagadnienia powiązane

CreateWindowTworzy nowe okno. (funkcja)
DestroyWindowNiszczy wskazane okno. (funkcja)
EnableWindowWłącza lub wyłącza otrzymywanie komunikatów od klawiatury i myszki dla danego okna. (funkcja)
RegisterClassRejestruje klasę okna. (funkcja)
SetActiveWindowAktywuje okno, które musi być powiązane z kolejką komunikatów wywołującego wątku. (funkcja)
SetForegroundWindowWysuwa podane okno na pierwszy plan. (funkcja)
SetWindowLongModyfikuje atrybuty okna (Windows 32 bitowy). (funkcja)
SetWindowPosZmienia rozmiar, pozycję lub kolejność wyświetlania okna. (funkcja)
ShowWindowUstawia określony stan widoczności okna. (funkcja)

Linki zewnętrzne