PDA

View Full Version : [Visual c++]Puntatore This e CClientDC


swarm
06-02-2006, 09:31
Salve a tutti

devo risolvere un piccolo problemino

(il probl principale è che nn sono pratico di Visual C++)...

Ho dichiarato un thread tramite questa dichiaraz (nell'header)

static DWORD WINAPI ThreadProc(LPVOID pObjPointer)

nel corpo della funzione, ho bisogno di dichiarare un oggetto della classe CClientDC, e di solito facevo così

CClientDC dc(this)

ora mi dice (ovv penso...) che il puntatore this nn è disponibile per funzioni membro static....

come devp dichiarare l'oggetto? devo ottenere in pratica l'area client della finestra di dialogo (per disegnarci)...

grazie!!

cionci
06-02-2006, 09:39
Non avevamo detto di mettere tutto all'interno di un metodo che faceva parte della classe e che era richiamato tramite un messaggio ?!?!?

In quel caso funziona tutto come prima...

swarm
06-02-2006, 09:44
Non avevamo detto di mettere tutto all'interno di un metodo che faceva parte della classe e che era richiamato tramite un messaggio ?!?!?

In quel caso funziona tutto come prima...

in pratica il thread richiamerà una funzione membro della classe?

giusto, scusami ma sto ancora dormendo....

ancora grazie.

cionci
06-02-2006, 10:04
Eravamo rimasti a questa struttura se non sbaglio:

for(int i=0; i<N; ++i)
{
dlg->drawComplete = false;
dlg->SendMessage(WM_DODRAWSTUFF);
while(!dlg->drawComplete)
Sleep(1);
if(dlg->stopThread)
break;
}

swarm
06-02-2006, 10:09
Eravamo rimasti a questa struttura se non sbaglio:

for(int i=0; i<N; ++i)
{
dlg->drawComplete = false;
dlg->SendMessage(WM_DODRAWSTUFF);
while(!dlg->drawComplete)
Sleep(1);
if(dlg->stopThread)
break;
}


infatti...

ma all'interno di questa struttura devo disegnare, quindi devo richiamare una funzione membro della classe (da me definita) che disegna, come faccio di solito....

e nella funzione membro uso il CClientDC dc(this)....

:fagiano:

cionci
06-02-2006, 10:20
dlg->SendMessage(WM_DODRAWSTUFF);

Ci penserà questo emssaggio a richimare la funzione che disegna !!! ;) Dovrai fare tutto lì dentro...

swarm
06-02-2006, 10:25
dlg->SendMessage(WM_DODRAWSTUFF);

Ci penserà questo emssaggio a richimare la funzione che disegna !!! ;) Dovrai fare tutto lì dentro...


ahhhh, ora ho capito.... :oink:

in pratica se richiamo direttamente la funzione così


while (!dlg->stopThread)
dlg->Disegna();

va male?

cionci
06-02-2006, 10:35
Sì...perchè c'è il solito problema che ci dava l'altra volta...in pratica MFC non vuole che la parte "grafica" dell'applicazione venga gestita da un thread diverso...

swarm
06-02-2006, 10:55
Sì...perchè c'è il solito problema che ci dava l'altra volta...in pratica MFC non vuole che la parte "grafica" dell'applicazione venga gestita da un thread diverso...

ok...

allora la chiamata a un'altra funzione la faccio tramite messaggio (come facevamo per la UpdateData con la funz OnUpdateData)...

ciao e buona giornata