Tienes algo mal en el codigo que omites. Te pongo un procedimiento principal aislado que funciona correctamente (compila como aplicacion de consola aun cuando es aplicacion gui, solo para ver los printf):
Código C:
Ver originalstruct TIMERDATA {
unsigned int hTimer;
int data;
};
struct TIMERDATA timerList[3];
void CALLBACK UnBan(HWND hwnd, unsigned int msg, unsigned id, unsigned long st) {
struct TIMERDATA *ptr;
if((ptr = (id < 3)? &timerList[id] : 0)) {
printf("ID %d, DATA %d\n", id
, ptr
->data
); ptr->data += 1;//modifico para comprovar que funciona
}
}
LRESULT CALLBACK procedimientoPrincipal(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
switch(msg) {
case WM_CREATE: {
int q;
for(q = 0; q < 3; q++) {
timerList[q].data = q+10;
timerList[q].hTimer = SetTimer(hwnd, q, 2000, UnBan);
Sleep(500);//delay para que no salten todos a la vez, no es necesario
}
}
break;
case WM_CLOSE: {
DestroyWindow(hwnd);
}
break;
case WM_DESTROY: {
PostQuitMessage(0);
}
break;
default: return DefWindowProc(hwnd, msg, wParam, lParam);
}
return 0;
}
Comprueba que esto funciona y como funciona, luego implementa en tu aplicacion y tiene que funcionar igual.
Saludos
vosk