Ir para conteúdo
Fórum Script Brasil

Igor Lira

Membros
  • Total de itens

    1
  • Registro em

  • Última visita

Tudo que Igor Lira postou

  1. 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: 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: Notem que o [0] é a única janela que funciona corretamente.
×
×
  • Criar Novo...