ciao.
Ho un applicazione c++ mfc che fa il rendering(opengl)di un solido in rotazioneogni tot di millisecondi.
Nella funzione ontimer(che si scatena a seconda del frame rate)chiamo l'invalidate della vista e l'update del frame(con le toolbar).
Il problema è che non mi aggiorna le toolbar.
Ma se nella funzione ontimer(nella vista) metto un :
killtimer(1)
((CMainFrame*)AfxGetMainWnd())->Invalidate();
((CMainFrame*)AfxGetMainWnd())->UpdateWindow();
settimer(1,...
tutto funziona correttamente.
Ho pensato che potrebbe essere un problema che si risolve col doevents(in c# e vb)ma uso le mfc e non c'è la funzione doevents.
Ho cercato su google e ho trovato vari esempi,ma se metto il doevents in nella funzione ontimer l'applicazione rallenta vistosamente , fino al punto di non accettare piu' comandi.
questa è la funzione del timer :
void CCMPView::OnTimer(UINT nIDEvent) {
.
.
((CMainFrame*)AfxGetMainWnd())->Invalidate();
((CMainFrame*)AfxGetMainWnd())->UpdateWindow();
DoEvents();
.
.
}
e questa è la funzione doevents che ho trovato:
void CCMPView:oEvents()
{
MSG oMSG;
while(::PeekMessage(&oMSG, NULL, 0, 0, PM_NOREMOVE))
{
if(::GetMessage(&oMSG, NULL, 0, 0))
{
::TranslateMessage(&oMSG);
:ispatchMessage(&oMSG);
oMSG.message;
}
else
{
break;
}
}
}
grazie.