Question

Donc, je suis un débutant total dans tout type de Windows programmation connexe.J'ai joué avec le Windows API et je suis tombé sur quelques exemples sur la façon d'initialiser la création de fenêtres et autres.

Un exemple crée une fenêtre normale (j'ai abrégé une partie du code) :

int WINAPI WinMain( [...] )
{

    [...]

    // Windows Class setup
    wndClass.cbSize = sizeof( wndClass );
    wndClass.style  = CS_HREDRAW | CS_VREDRAW;
    [...]    

    // Register class
    RegisterClassEx( &wndClass );

    // Create window
    hWnd = CreateWindow( szAppName, "Win32 App",
                         WS_OVERLAPPEDWINDOW,
                         0, 0, 512, 384,
                         NULL, NULL, hInstance, NULL );
    [...]
}

Le deuxième exemple crée une boîte de dialogue (pas d'abréviations sauf les arguments WinMain) :

int WINAPI WinMain( [...] )
{
    // Create dialog box
    DialogBox(hInstance, 
              MAKEINTRESOURCE(IDD_MAIN_DLG), 
              NULL, 
              (DLGPROC)DialogProc);
}

Le deuxième exemple ne contient aucun appel à la fonction register.Il crée simplement la DialogBox avec son processus DialogProc attaché.

Cela fonctionne bien, mais je me demande s'il y a un avantage à enregistrer la classe window puis à créer la boîte de dialogue (si cela est possible).

Était-ce utile?

La solution

Vous n'êtes pas obligé d'enregistrer une boîte de dialogue.

Les boîtes de dialogue sont prédéfinies donc (comme vous l'avez noté) il n'y a aucune référence à une classe de fenêtre lorsque vous créez une boîte de dialogue.Si vous souhaitez plus de contrôle sur une boîte de dialogue (comme vous l'obtenez lorsque vous créez votre propre classe de fenêtre), vous sous-classerez la boîte de dialogue qui est une méthode par laquelle vous remplacez la procédure de fenêtre de boîte de dialogue par la vôtre.Lorsque votre procédure est appelée vous modifiez le comportement de la fenêtre de dialogue ;vous pouvez alors appeler ou non la procédure de fenêtre d'origine en fonction de ce que vous essayez de faire.

Autres conseils

Cela fait un moment que je n'ai pas fait cela, mais IIRC, le premier cas concerne la création dynamique d'un dialogue, à partir d'un modèle en mémoire.Le deuxième exemple concerne le cas beaucoup plus courant de création d’un dialogue à l’aide d’une ressource.Les éléments de dialogue dynamique dans Win32 étaient assez complexes, mais ils vous permettaient de créer une véritable interface basée sur les données et d'éviter les problèmes de regroupement de ressources avec des DLL.

Quant à savoir pourquoi utiliser Win32 - si vous avez besoin d'une application Windows et que vous ne voulez pas dépendre de MFC ou du runtime .NET, alors c'est ce que vous utilisez.

Ceci n'est que indirectement lié à la question, mais si vous êtes nouveau dans la programmation Windows, pourquoi utilisez-vous Win32 ?À moins qu'il n'y ait beaucoup de code bas de gamme (qui devrait de toute façon être séparé de l'interface graphique), il est probablement plus logique d'utiliser .NET, ce qui devrait également causer beaucoup moins de blessures à la tête.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top