Ir para conteúdo
Fórum Script Brasil
  • 0

Problema com classes


Igor Lira

Pergunta

Olá, estou criando um programa que utiliza a Windows API e estou com um problema:

Tenho uma Clase CFrame, que deriva da classe Control, ao inicializar, a classe CFrame guarda o HWND nela mesma e aciona um método global, chamado "AddWindow", que está no arquivo WindowManager.cpp, esse método armazena o HWND e o objeto CFrame, depois, quando o WndProc é acionado, o WindowManager.cpp procura um CFrame que corresponda ao HWND solicitado (Control *GetFrameByHandle(HWND hwnd)) numa classe chamada Hashtable, na primeira janela criada, funciona perfeitamente, mas se eu quiser criar outra janela, a janela é criada, mas durante o WndProc, o CFrame correspondente ao HWND não é encontrado, consequentemente, isso acontece:

9mPze.png

A janela da direita foi criada primeiro, durante o método WinMain, a da esquerda foi criada em outro método.

WndProc:

LRESULT CALLBACK GlobalWndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
{
    LRESULT result = -1;
    switch( message )
    {
        [...]
    }

    Control *frame = GetFrameByHandle(hwnd);
            
    if(frame && frame->ready == true)// != NULL)
    {
        LRESULT r = frame->WndProc(message, wparam, lparam);
        if(r != -1)
            return r;
        if(result != -1)
            return result;
    }
    else
    {
        int i = 0;
    }

    return DefWindowProc( hwnd, message, wparam, lparam );
}
AddWindow:
void AddWindow(HWND hwnd, Control* frame)
{
    windowList.add(hwnd, frame);
}
GetFrameByHandle:
Control *GetFrameByHandle(HWND hwnd)
{
    std::vector<Control*> wnds = windowList.GetValues();
    for(int i = 0; i < wnds.size(); i++)
    {
        Control* frame = wnds[i];
        if(frame->hwnd == hwnd)
            return frame;
    }
    return NULL;
}

Uma observação é que os valores do HWND do CFrame mudam espontaneamente, por um motivo que desconheço:

gQT2n.png

Notem que o [0] é a única janela que funciona corretamente.

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...