Pergunta

Então, sou totalmente iniciante em qualquer tipo de Windows programação relacionada.Eu tenho brincado com o Windows API e me deparei com alguns exemplos sobre como inicializar, criar janelas e coisas assim.

Um exemplo cria uma janela normal (abreviei parte do código):

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

O segundo exemplo cria uma caixa de diálogo (sem abreviações, exceto os argumentos WinMain):

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

O segundo exemplo não contém nenhuma chamada para a função de registro.Ele apenas cria o DialogBox com seu processo DialogProc anexado.

Isso funciona bem, mas estou me perguntando se há algum benefício em registrar a classe de janela e, em seguida, criar a caixa de diálogo (se isso for possível).

Foi útil?

Solução

Você não precisa registrar uma caixa de diálogo.

As caixas de diálogo são predefinidas para que (como você observou) não haja referência a uma classe de janela quando você cria uma caixa de diálogo.Se você quiser mais controle de uma caixa de diálogo (como você obtém quando cria sua própria classe de janela), você criaria uma subclasse da caixa de diálogo, que é um método pelo qual você substitui o procedimento da janela de diálogo pelo seu próprio.Quando seu procedimento é chamado você modifica o comportamento da janela de diálogo;você pode ou não chamar o procedimento da janela original, dependendo do que está tentando fazer.

Outras dicas

Já faz um tempo que não faço isso, mas IIRC, o primeiro caso é criar um diálogo dinamicamente, a partir de um modelo na memória.O segundo exemplo é para o caso muito mais comum de criação de um diálogo usando um recurso.O material de diálogo dinâmico no Win32 era bastante complexo, mas permitia criar uma interface verdadeiramente orientada a dados e evitar problemas com o agrupamento de recursos com DLLs.

Quanto ao motivo de usar o Win32 - se você precisa de um aplicativo do Windows e não quer depender do MFC ou do tempo de execução do .NET, é isso que você usa.

Isso está apenas tangencialmente relacionado à questão, mas se você é novo na programação do Windows, por que está usando o Win32?A menos que haja muito código de baixo custo (que de qualquer maneira deveria ser separado da GUI), provavelmente faz mais sentido usar o .NET, que também deve causar muito menos ferimentos na cabeça.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top