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.