Udostępnij za pośrednictwem


Okno z CWindowImpl wykonawcze

Aby zaimplementować okna, czerpią klasy z CWindowImpl.W klasie pochodnej zadeklarować mapę wiadomości i funkcje obsługi wiadomości.Można teraz użyć klasy trzy różne sposoby:

  • Tworzenie okna oparte na nową klasę Windows

  • Superklasa istniejącej klasy systemu Windows

  • Istniejące okno podklasy

Tworzenie okna oparte na nową klasę Windows

CWindowImplzawiera DECLARE_WND_CLASS makro zadeklarować informacje klasy systemu Windows.To makro implementuje GetWndClassInfo funkcji, która używa CWndClassInfo do definiowania informacji nową klasę systemu Windows.Gdy CWindowImpl::Create nazywa to Windows klasa jest zarejestrowana i tworzone jest nowe okno.

[!UWAGA]

CWindowImplprzekazuje NULL do DECLARE_WND_CLASS makra, co oznacza ATL wygeneruje Nazwa klasy systemu Windows.Aby określić własne nazwy, przekazać ciąg DECLARE_WND_CLASS w sieci CWindowImpl-klasy.

Przykład

Oto przykład klasy, która implementuje okno oparte na nową klasę Windows:

class CMyCustomWnd : public CWindowImpl<CMyCustomWnd>
{
public:
   // Optionally specify name of the new Windows class
   DECLARE_WND_CLASS(_T("MyName")) 
              // If this macro is not specified in your
              // class, ATL will generate a class name

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

   LRESULT OnPaint(UINT /*nMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, 
      BOOL& /*bHandled*/)
   {
      // Do some painting code
      return 0;
   }

};

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

[!UWAGA]

Aby zastąpić domyślne informacje o klasy systemu Windows, należy zaimplementować GetWndClassInfo metoda w klasie pochodnej przez ustawienie CWndClassInfo członków na odpowiednie wartości.

Po jest przykład klasy tej edycji standardowych superklas klasy:

class CMyEdit : public CWindowImpl<CMyEdit>
{
public:
   // "Edit" is the name of the standard Windows class.
   // "MyEdit" is the name of the new Windows class
   // that will be based on the Edit class.
   DECLARE_WND_SUPERCLASS(_T("MyEdit"), _T("Edit"))

   BEGIN_MSG_MAP(CMyEdit)
      MESSAGE_HANDLER(WM_CHAR, OnChar)
   END_MSG_MAP()

   LRESULT OnChar(UINT /*nMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, 
      BOOL& /*bHandled*/)
   {
      // Do some character handling code
      return 0;
   }
};

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

Superclassing istniejącej klasy systemu Windows

DECLARE_WND_SUPERCLASS makro umożliwia tworzenie okna tego istniejące Windows superklas klasy.Określenie to makro programu CWindowImpl-klasy.Podobnie jak inne okna ATL wiadomości są obsługiwane przez mapę wiadomości.

Kiedy używać DECLARE_WND_SUPERCLASS, nowa klasa Windows zostanie zarejestrowany.To nowa klasa będzie identyczna z klasy istniejącej, określić, ale zastąpią procedury okna z CWindowImpl::WindowProc (lub z funkcji ta metoda zastępuje).

Tworzenie podklas istniejące okno

Do podklasy istniejące okno pochodzić z klasy CWindowImpl i zadeklarować mapę wiadomości, jak w poprzednich dwóch przypadków.Należy jednak zauważyć, że nie określisz wszelkie informacje klasy systemu Windows, ponieważ będzie już istniejące okno podklasy.

Zamiast wywołania Tworzenie, call SubclassWindow i przekazać jej uchwyt istniejące okno chcesz podklasy.Po podklasy okna będą używać CWindowImpl::WindowProc (lub funkcja ta metoda zastępuje) wiadomości do mapy wiadomości bezpośrednich.Aby odłączyć subclassed okno z obiektu, wywołanie UnsubclassWindow.Następnie procedurę okna oryginalnego okna zostaną przywrócone.

Zobacz też

Informacje

Okno wykonawczych