Jump to content
Fórum Script Brasil
  • 0

Problema com classes


Igor Lira

Question

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 to comment
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...