2012-04-11 11 views
2

Ich habe ein benutzerdefiniertes Steuerelement von ATL::CWindowImpl<CMyCustomControl> abgeleitet und DECLARE_WND_CLASS(_T("CMyCustomControl")) deklariert.Wie registriere ich ein benutzerdefiniertes Steuerelement im ATL/WTL-Dialog?

Ich habe auch eine Dialogressource mit einem benutzerdefinierten Steuerelement mit dem Klassennamen CMyCustomControl erstellt.

Wie gehe ich vor, um das Steuerelement ordnungsgemäß zu registrieren, damit ich es im Dialogfeld anzeigen kann?

+1

Sie könnten finden, was Sie in dieser Frage suchen: http://stackoverflow.com/questions/575532/pre-registering-an-atl-window-class Offensichtlich ist es nicht möglich. –

+0

@MarkRansom: Shooooot ... ist das wirklich "Vorregistrierung" obwohl? Es ist mir wirklich egal * wenn * es registriert ist (nichts von 3rd-Party-y geht), ich will nur, dass es auftaucht ... klingt wie etwas ziemlich Standard für ein benutzerdefiniertes Steuerelement ... – Mehrdad

+0

Wenn Sie die Ressource wollen Um das Steuerelement automatisch zu erstellen, wenn der Dialog erstellt wird, muss Windows natürlich vorher die Fensterklasse kennen. Die Taktik, in OnInitDialog ein Dummy Control und Subclassing zu erstellen, funktioniert jedoch recht gut. –

Antwort

2

Es gibt drei typische Möglichkeiten, benutzerdefinierte Steuerelemente in WTL zu erstellen.

  1. DECLARE_WND_CLASS/DECLARE_WND_SUPERCLASS + RegisterClassEx API Klasse von Namen + individuelle Steuerreferenz in Dialogvorlage registrieren Steuerung durch Klassennamen, esp
  2. Implementieren Fensterklasse zu instanziieren. Erben von CWindowImpl, und erstellen Sie die Kontrolle manuell, esp. von OnCreate/OnInitDialog
  3. Fensterklasse implementieren, Standardsteuerung durch Dialogvorlage, instanziiert und die Steuerungsinstanz Unterklasse sein Verhalten zu ändern (zB statische mit Hyperlinks, benutzerdefinierte Liste anzeigen, bearbeiten Kontrolle mit Farbhervorhebung usw.)

Bei allen drei müssen Sie mehr als nur ein Makro in der Klassendefinition machen. Hier finden Sie tolle Beispiele: http://www.viksoe.dk/code/all_wtl.htm unter "Controls".

Sicher die vierte Methode implementiert ein ActiveX-Steuerelement.

+0

Über viksoe.dk vergessen. +1 - Danke für die Referenz. – bvj