Wdrażanie okno z CWindowImpl

Aby zaimplementować okna, wywodzić klasy CWindowImpl. W klasie pochodnej stwierdzenie mapy wiadomości i funkcje obsługi wiadomości. Można teraz używać klasy na trzy różne sposoby:

Tworzenie okna w oparciu o nową klasę systemu Windows

CWindowImpl zawiera makra DECLARE_WND_CLASS Aby zadeklarować informacje klasy systemu Windows. To makro implementuje funkcję GetWndClassInfo , która używa CWndClassInfo do definiowania informacji nową klasę systemu Windows. Wywołanie CWindowImpl::Create tej klasy systemu Windows jest zarejestrowany i tworzone jest nowe okno.

Uwaganbsp;CWindowImpl przekazuje wartość &NULL do makra DECLARE_WND_CLASS , co oznacza, że ATL wygeneruje nazwę klasy systemu Windows. Aby określić własną nazwę, przekazuje ciąg do DECLARE_WND_CLASS w Twojej CWindowImpl-klasy.

Oto przykład klasy, która implementuje okna w oparciu o nową klasę systemu Windows:

klasa CMyWindow: CWindowImpllt publicznych;CMyWindow >,...
{
publiczne:
   / / Opcjonalnie określ nazwę nowej klasy systemu Windows
   DECLARE_WND_CLASS("MyName") / / Jeżeli to makro nie jest określony w sieci
              / / klasy, ATL wygeneruje nazwy klasy
   ...

BEGIN_MSG_MAP(CMyWindow)
      MESSAGE_HANDLER (WM_PAINT, OnPaint)
   END_MSG_MAP()

LRESULT OnPaint(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
   {
      / / Czy kodu malarstwa
      zwrócona wartość 0;
   }
}

Aby utworzyć okna, należy utworzyć wystąpienie CMyWindow , a następnie wywołać metodę tworzenia.

Uwaga   Aby zastąpić domyślne informacje klasy systemu Windows, implementacji metody GetWndClassInfo w klasie pochodnej ustawiając członków CWndClassInfo na odpowiednie wartości.

Superclassing istniejącej klasy systemu Windows

Makro DECLARE_WND_SUPERCLASS umożliwia tworzenie okna tego superklas istniejącego systemu Windows klasy. Określenie to makro w Twojej CWindowImpl-klasy. Podobnie jak inne okna ATL wiadomości są obsługiwane przez mapy wiadomości.

Podczas korzystania z DECLARE_WND_SUPERCLASS, nową klasę systemu Windows zostanie zarejestrowany. Ta nowa klasa będzie taka sama jak istniejącej klasy można określić, ale zastąpi procedurę okna z CWindowImpl::WindowProc (lub z funkcją, która zastępuje tę metodę).

Po jest przykładem klasy tej superklas Standardowa edycja klasy:

klasa CMyEdit: CWindowImpllt publicznych;CMyEdit >,...
{
publiczne:
   / / "Edit" jest nazwą klasy standardowego systemu Windows.
   / / "MyEdit" jest nazwą nowej klasy systemu Windows
   / / który opiera się na klasę Edycja.
   DECLARE_WND_SUPERCLASS ("Edytuj", "MyEdit")

...
   BEGIN_MSG_MAP(CMyEdit)
      MESSAGE_HANDLER (używając funkcji, OnChar)
   END_MSG_MAP()

LRESULT OnChar(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
   {
      / / Do niektórych znaków kod obsługi
   }
}

Aby utworzyć superclassed okno edycji, należy utworzyć wystąpienie CMyEdit , a następnie wywołać metodę tworzenia.

Aby uzyskać więcej informacji na temat superclassing, zobacz Superclassing procedurę okna w zestawie Win32 SDK.

Instacji thumbnail

Podklasa thumbnail pochodną klasy CWindowImpl i zadeklarować na mapie wiadomości, jak w dwóch poprzednich przypadkach. Zauważ jednak, że nie określisz żadnych informacji klasy systemu Windows, ponieważ będzie podklasy już istniejące okno.

Zamiast z wywołaniem Tworzenie, wywołanie SubclassWindow i przekazać je dojście do okna istniejące, które chcesz podklasy. Gdy okno jest podklasą klasy, będzie używać CWindowImpl::WindowProc (lub użytkownika funkcji, która zastępuje tę metodę) do bezpośredniego wiadomości do mapy wiadomości. Aby odłączyć subclassed okno z obiektu, wywołanie UnsubclassWindow. Następnie zostanie przywrócone okna oryginalnego okna procedury.

Aby uzyskać więcej informacji na temat podklasy, zobacz Okno procedury podklasy w zestawie Win32 SDK.

Index