J'utilise une combinaison de l'ATL et WTL pour un projet et ont dérivé ma propre classe de CWindowImpl
, qui ressemble à ceci:pré-enregistrement d'une classe de fenêtre ATL
class CMyControl : public CWindowImpl<CMyControl>
{
public:
DECLARE_WND_CLASS(_T("MyClassName"))
...
BEGIN_MSG_MAP(CMyControl)
...
END_MSG_MAP()
};
C'est tout bon, et si j'utilise CMyControl::Create
pour créer une instance du contrôle, alors cela fonctionne très bien car sous le capot, la fonction CWindowImpl::Create
va enregistrer la classe Win32 (dans ce cas appelé MyClassName
).
Cependant, c'est ce comportement - la classe Win32 étant enregistrée lors de la création d'une instance - qui me cause un mal de tête. Je veux être en mesure d'enregistrer la classe à l'avance afin que je puisse utiliser le nom de classe avec une autre bibliothèque tierce qui créera la fenêtre en utilisant l'appel Win32 CreateWindowEx
, mais je ne trouve pas un moyen simple de le faire. Actuellement, je contourne ce problème en utilisant static
comme nom de classe CreateWindowEx
, puis j'utilise CMyWindow::SubclassWindow
pour y attacher ma classe, mais ceci est un kludge.
Est-ce que quelqu'un sait comment enregistrer une classe dérivée CWindowImpl
sans réellement créer une fenêtre, donc je peux passer le nom de classe à CreateWindowEx
avec succès? Je pensais qu'il y avait un moyen standard de faire cela avec les fenêtres ATL car je ne peux pas être le premier à rencontrer ce problème.