2011-08-02 4 views
0

Récemment, j'étudie le développement de Symbian. Lorsque je souhaite utiliser CDirectScreenAccess pour dessiner directement sur l'appareil, la question se pose. Mon code est ci-dessous:question en utilisant CDirectScreenAccess de Symbian dev

//MySnakeAppView.h 
class CMySnakeAppView : public CCoeControl 
{ 
... 
private: 
void ConstructL(const TRect& aRect); 
CDirectScreenAccess* iDSA; 
void Restart(RDirectScreenAccess::TTerminationReasons aReason); 
void AbortNow(RDirectScreenAccess::TTerminationReasons aReason); 
void DrawGraphics(); 
... 
} 

//MySnakeAppView.cpp 

void CMySnakeAppView::ConstructL(const TRect& aRect) 
    { 
// Create a window for this application view 
CreateWindowL(); 

// Set the windows size 
SetRect(aRect); 

// Activate the window, which makes it ready to be drawn 
ActivateL(); 


CEikonEnv* env = CEikonEnv::Static(); 
iDSA = CDirectScreenAccess::NewL(env->WsSession(), *env->ScreenDevice(), Window(), *this); 

iDSA->StartL(); 
DrawGraphics(); 
} 
void CMySnakeAppView::DrawGraphics() 
    { 
CFbsBitGc *gc = iDSA->Gc(); 
TRgb colorRed = AKN_LAF_COLOR(35); 
gc->SetPenColor(colorRed); 
gc->DrawRect(TRect(0,0,100,100)); 
iDSA->ScreenDevice()->Update(); 

} 
void CMySnakeAppView::Restart(RDirectScreenAccess::TTerminationReasons aReason) 
    { 

    iDSA->StartL(); 
    DrawGraphics(); 
    } 
void CMySnakeAppView::AbortNow(RDirectScreenAccess::TTerminationReasons aReason) 
    { 

    iDSA->Cancel(); 
    } 

quand je construis ce projet, il est mal avec le code IDSA = CDirectScreenAccess :: NEWL (env-> WsSession(), * env-> ScreenDevice(), Fenêtre (), *ce); c'est une erreur écrit: 'MDirectScreenAccess &' - conversion implicite illégale de 'CMySnakeAppView' à mais quand je le fais comme ceci: IDSA = CDirectScreenAccess :: NEWL (env-> WsSession (*), env -> ScreenDevice(), Window(), (MDirectScreenAccess &) * ceci);

il n'y a pas d'erreur dans la construction, mais encore erreur dans le projet, je ne sais pas pourquoi, j'ai besoin de votre aide

Répondre

1

Votre CMySnakeAppView devrait tirer de MDirectScreenAccess - il semble que vous met déjà en œuvre les bonnes méthodes, vous manque juste la déclaration:

class CMySnakeAppView : public CCoeControl, public MDirectScreenAccess 
+0

Oui je le fais comme ça, Et ça marche! Merci! – user710756

+0

accepter sa réponse si cela fonctionne – James

1

Vous ne pouvez pas passer *, parce que ce n'est pas une istance d'un MDirectScreenAccess, ni une istance d'une classe qui en hérite. Vous pouvez le lancer manuellement, mais c'est une erreur. Vous devez construire une classe qui hérite de MDirectScreenAccess et, à partir de là, construire l'iDSA. Regardez ici:

http://www.developer.nokia.com/Community/Wiki/Anti-tearing_with_CDirectScreenBitmap

+0

Merci pour votre aide . Je le fais comme ça Et ça marche ~ – user710756