Ich verwende eine Kombination aus ATL und WTL für ein Projekt und habe meine eigene Klasse von CWindowImpl
die in etwa so aussieht:
class CMyControl : public CWindowImpl<CMyControl>
{
public:
DECLARE_WND_CLASS(_T("MyClassName"))
...
BEGIN_MSG_MAP(CMyControl)
...
END_MSG_MAP()
};
Das ist alles gut, und wenn ich die CMyControl::Create
um eine Instanz des Steuerelements zu erstellen, dann funktioniert es einwandfrei, da unter der Haube, die CWindowImpl::Create
Funktion registriert die Win32-Klasse (in diesem Fall die MyClassName
).
Es ist jedoch dieses Verhalten - die Win32-Klasse wird registriert, wenn eine Instanz erstellt wird -, das mir Kopfschmerzen bereitet. Ich möchte in der Lage sein, die Klasse im Voraus zu registrieren, damit ich den Klassennamen in einer anderen Bibliothek eines Drittanbieters verwenden kann, die das Fenster mit der Win32-Klasse erstellt. CreateWindowEx
aufzurufen, aber ich kann keine einfache Möglichkeit finden, dies zu tun. Gegenwärtig umgehe ich dieses Problem durch die Verwendung von static
als die CreateWindowEx
Klassenname und verwenden Sie dann CMyWindow::SubclassWindow
um meine Klasse damit zu verknüpfen, aber das ist eine Flickschusterei.
Weiß jemand, wie man eine CWindowImpl
abgeleitete Klasse, ohne tatsächlich ein Fenster zu erstellen, so dass ich den Klassennamen an CreateWindowEx
erfolgreich? Ich hätte gedacht, dass es eine Standardmethode gibt, dies mit ATL Windows zu tun, da ich nicht der Erste sein kann, der auf dieses Problem stößt.