Domanda

Quindi, sono un principiante assoluto in qualsiasi tipo di Windows relativa programmazione.Ho giocato con il Windows API e mi sono imbattuto in un paio di esempi su come inizializzare la creazione di finestre e simili.

Un esempio crea una finestra normale (ho abbreviato parte del codice):

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 );
    [...]
}

Il secondo esempio crea una finestra di dialogo (senza abbreviazioni tranne gli argomenti WinMain):

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

Il secondo esempio non contiene alcuna chiamata alla funzione Register.Crea semplicemente il DialogBox con il suo processo DialogProc allegato.

Funziona bene, ma mi chiedo se ci sia un vantaggio nel registrare la classe finestra e quindi creare la finestra di dialogo (se ciò è possibile).

È stato utile?

Soluzione

Non è necessario registrare una finestra di dialogo.

Le finestre di dialogo sono predefinite quindi (come hai notato) non vi è alcun riferimento a una classe di finestre quando crei una finestra di dialogo.Se desideri un maggiore controllo su una finestra di dialogo (come ottieni quando crei la tua classe finestra) dovresti creare una sottoclasse della finestra di dialogo che è un metodo con il quale sostituisci la procedura della finestra di dialogo con la tua.Quando viene richiamata la procedura, modifichi il comportamento della finestra di dialogo;potresti quindi chiamare o meno la procedura della finestra originale a seconda di cosa stai cercando di fare.

Altri suggerimenti

È passato un po' di tempo dall'ultima volta che lo ho fatto, ma IIRC, il primo caso riguarda la creazione di una finestra di dialogo in modo dinamico, da un modello in memoria.Il secondo esempio riguarda il caso molto più comune di creazione di una finestra di dialogo utilizzando una risorsa.Il materiale della finestra di dialogo dinamica in Win32 era piuttosto complesso, ma consentiva di creare una vera interfaccia basata sui dati ed evitare problemi con il raggruppamento di risorse con DLL.

Per quanto riguarda il motivo per cui utilizzare Win32: se hai bisogno di un'app Windows e non vuoi dipendere da MFC o dal runtime .NET, allora è quello che usi.

Questo è correlato solo tangenzialmente alla domanda, ma se sei nuovo nella programmazione Windows, perché usi Win32?A meno che non ci sia molto codice di fascia bassa (che dovrebbe comunque essere separato dalla GUI), probabilmente ha più senso usare .NET, che dovrebbe causare anche molte meno lesioni alla testa.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top