Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule dowiesz się, jak utworzyć i wyświetlić okno.
Klasy okien
Klasa okien definiuje zestaw zachowań, które mogą występować w kilku oknach. Na przykład w grupie przycisków każdy przycisk ma podobne zachowanie, gdy użytkownik wybierze przycisk. Oczywiście przyciski nie są całkowicie identyczne. Każdy przycisk wyświetla własny ciąg tekstowy i ma własne współrzędne ekranu. Dane, które są unikatowe dla każdego okna, są nazywane danymi wystąpienia .
Każde okno musi być skojarzone z klasą okien, nawet jeśli program tylko kiedykolwiek tworzy jedno wystąpienie tej klasy. Klasa okien nie jest klasą w sensie C++. Jest to raczej struktura danych używana wewnętrznie przez system operacyjny. Klasy okien są rejestrowane w systemie podczas działania. Aby zarejestrować nową klasę okien, wypełnij strukturę WNDCLASS:
// Register the window class.
const wchar_t CLASS_NAME[] = L"Sample Window Class";
WNDCLASS wc = { };
wc.lpfnWndProc = WindowProc;
wc.hInstance = hInstance;
wc.lpszClassName = CLASS_NAME;
Należy ustawić następujące człony struktury:
- lpfnWndProc jest wskaźnikiem do funkcji zdefiniowanej przez aplikację, nazywanej procedurą okna lub procedurą okna . Procedura okna definiuje większość zachowania okna. Na razie ta wartość jest deklaracją funkcji do przodu. Aby uzyskać więcej informacji, zobacz Procedura pisania okna.
-
hInstance to uchwyt do wystąpienia aplikacji. Pobierz tę wartość z hInstance parametru
wWinMain. - lpszClassName to ciąg identyfikujący klasę okien.
Nazwy klas są lokalne dla bieżącego procesu, więc nazwa musi być unikatowa tylko w ramach procesu. Jednak standardowe kontrolki systemu Windows mają również klasy. Jeśli używasz żadnej z tych kontrolek, musisz wybrać nazwy klas, które nie powodują konfliktu z nazwami klas kontrolek. Na przykład klasa okna kontrolki przycisku nosi nazwę Button.
Struktura WNDCLASS zawiera inne elementy członkowskie, które nie są tutaj wyświetlane. Można ustawić je na zero, jak pokazano w tym przykładzie, lub wypełnić je. Aby uzyskać więcej informacji, zobacz WNDCLASS.
Następnie przekaż adres struktury WNDCLASS do funkcji RegisterClass. Ta funkcja rejestruje klasę okien w systemie operacyjnym.
RegisterClass(&wc);
Tworzenie okna
Aby utworzyć nowe wystąpienie okna, wywołaj funkcję CreateWindowEx:
HWND hwnd = CreateWindowEx(
0, // Optional window styles.
CLASS_NAME, // Window class
L"Learn to Program Windows", // Window text
WS_OVERLAPPEDWINDOW, // Window style
// Size and position
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
NULL, // Parent window
NULL, // Menu
hInstance, // Instance handle
NULL // Additional application data
);
if (hwnd == NULL)
{
return 0;
}
Aby uzyskać szczegółowe opisy parametrów, zobacz CreateWindowEx. Oto krótkie podsumowanie:
- Pierwszy parametr umożliwia określenie niektórych opcjonalnych zachowań okna, na przykład przezroczystych okien. Ustaw ten parametr na zero dla domyślnych zachowań.
-
CLASS_NAMEjest nazwą klasy okna. Ta nazwa definiuje typ okna do utworzenia. - Tekst okna jest używany na różne sposoby przez różne typy okien. Jeśli okno ma pasek tytułu, tekst jest wyświetlany na pasku tytułu.
- Styl okna to zestaw flag, które definiują niektóre wygląd i działanie okna. Stała WS_OVERLAPPEDWINDOW to w rzeczywistości kilka flag połączonych za pomocą operacji bitowej
OR. Razem te flagi dają oknu pasek tytułu, obramowanie, menu systemowe i przyciski Minimalizuj i Maksymalizuj. Ten zestaw flag jest najbardziej typowym stylem okna aplikacji najwyższego poziomu. - W przypadku pozycji i rozmiaru stała CW_USEDEFAULT oznacza użycie wartości domyślnych.
- Następny parametr ustawia okno nadrzędne lub okno właściciela dla nowego okna. Ustaw element nadrzędny, jeśli ma zostać utworzone okno podrzędne. W oknie najwyższego poziomu ustaw tę wartość na
NULL. - W przypadku okna aplikacji następny parametr definiuje menu dla okna. W tym przykładzie nie jest używane menu, więc wartość jest
NULL. - hInstance to uchwyt instancji, jak opisano wcześniej. Zobacz WinMain: Punkt wejścia aplikacji.
- Ostatni parametr jest wskaźnikiem do dowolnych danych typu
void*. Za pomocą tej wartości można przekazać strukturę danych do procedury okna. Aby użyć tego parametru, zobacz Zarządzanie stanem aplikacji.
createWindowEx zwraca uchwyt do nowego okna lub zero, jeśli funkcja ulegnie awarii. Aby wyświetlić okno, czyli uczynić je widocznym, przekaż uchwyt okna do funkcji ShowWindow:
ShowWindow(hwnd, nCmdShow);
Parametr hwnd jest uchwytem okna zwróconym przez funkcję CreateWindowEx. Parametr nCmdShow można użyć do zminimalizowania lub zmaksymalizowania okna. System operacyjny przekazuje tę wartość do programu za pośrednictwem funkcji wWinMain.
Oto kompletny kod umożliwiający utworzenie okna. Należy pamiętać, że windowProc jest nadal po prostu deklaracją funkcji do przodu.
// Register the window class.
const wchar_t CLASS_NAME[] = L"Sample Window Class";
WNDCLASS wc = { };
wc.lpfnWndProc = WindowProc;
wc.hInstance = hInstance;
wc.lpszClassName = CLASS_NAME;
RegisterClass(&wc);
// Create the window.
HWND hwnd = CreateWindowEx(
0, // Optional window styles.
CLASS_NAME, // Window class
L"Learn to Program Windows", // Window text
WS_OVERLAPPEDWINDOW, // Window style
// Size and position
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
NULL, // Parent window
NULL, // Menu
hInstance, // Instance handle
NULL // Additional application data
);
if (hwnd == NULL)
{
return 0;
}
ShowWindow(hwnd, nCmdShow);
Gratulacje, utworzono okno!
W tej chwili okno nie zawiera żadnej zawartości ani nie wchodzi w interakcję z użytkownikiem. W rzeczywistej aplikacji graficznego interfejsu użytkownika okno reaguje na zdarzenia od użytkownika i systemu operacyjnego. W następnej sekcji opisano, jak komunikaty okien zapewniają tego rodzaju interakcyjność.
Zobacz też
Przejdź do komunikatów okna, aby kontynuować ten moduł.