Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826

    [c++ mfc]doevents

    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.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,472
    Ma nella OnDraw cosa hai scritto?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    non c'ho messo niente , è li che dovrei piazzare il doevents?

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,472
    No ... prima bisogna capire se la doevents c'entra ...

    Dato che ne parlavi mi chiedevo dove tu avessi inserito il codice per il render opengl ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    Non lo so ,so che mettendo il kill timer tutto funziona ,è per questo che ho chiesto se poteva essere il doevents
    nel caso centrasse , è giusta la funzione doevents in c++ che ho postato?
    grazie.

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,472
    Sì ... mi sembra corretta ... ma non mi hai risposto su OGL ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    Ha , ho visto adesso la domanda,il render è proprio in ondraw scusa .

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    in pratica ho una funzione ontimer che chiama l'invalidate ogni tot di millisecondi, e una funzione ondraw che fa il render opengl.
    Se tolgo l'invalidate nella funzione ontimer l'animazione si ferma.
    Se lascio l'invalidate , in solidi complessi le toolbar spariscono ogni tanto.
    Ho provato ogni 3/4 volte di ontimer a chiamare l'invalidate del frame cosi: if(!(uiTreshOldDoevents % 4))
    {
    ((CMainFrame*)AfxGetMainWnd())->Invalidate();
    ((CMainFrame*)AfxGetMainWnd())->UpdateWindow();
    //DoEvents(GetSafeHwnd());
    m_uiTreshOldDoevents=0;
    }
    uiTreshOldDoevents++;
    (in pratica ogni 4 ridisegni del solido)
    ma non funziona.
    Come faccio il refresh delle toolbar?
    grazie.

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2004
    Messaggi
    286
    No ho capito come fai ad avere dei problemi alle toolbars.
    Qual'é l'obiettivo che vuoi raggiungere? Attivare o disattivare la rotazione dei solidi renderizzari nella finestra?

  10. #10
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    scusa se mi sono spiegato male , mentre il solido ruota devo fare delle operazioni di show/hide sulle toolbar(a seconda di dei modelli di toolbar che l'utente puo' scegliere) , solo che probabilmente il render si mangia tutte le risorse e non lascia tempo di ridisegnarle.
    spero di essermi spiegato , scusa per il post precedente.
    Un alternativa sarebbe forse sapere quando le toolbar necessitano di essere ridisegnate , ma come?
    Oppure lanciare un messaggio personalizzato alla vista di ridisegnare le toolbar anzichè il solido.
    ciao.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.