使用Symbian dev的CDirectScreenAccess的问题

时间:2011-08-02 08:24:07

标签: symbian

最近,我正在研究Symbian开发。当我想使用CDirectScreenAccess直接在设备上绘图时,会出现问题。 我的代码如下:

//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();
    }

当我构建这个项目时,代码出错了      iDSA = CDirectScreenAccess :: NewL(env-> WsSession(),* env-> ScreenDevice(),Window(),* this); 这写错了:         'MDirectScreenAccess&'      - 非法隐式转换      'CMySnakeAppView'来 但是当我这样做的时候:     iDSA = CDirectScreenAccess :: NewL(env-> WsSession(),* env-> ScreenDevice(),Window(),(MDirectScreenAccess&)* this);

建筑没有错,但项目中仍有错误,我不知道为什么,我需要你的帮助

2 个答案:

答案 0 :(得分:1)

你不能传递* this,因为它不是MDirectScreenAccess类的一个等级,也不是从它继承的类的istance。您可以手动投射,但这是一个错误。您应该构建一个继承自MDirectScreenAccess的类,并从那里构建iDSA。看看这里:

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

答案 1 :(得分:1)

您的CMySnakeAppView应来自MDirectScreenAccess - 看起来您已经在实施正确的方法,您只是错过了声明:

class CMySnakeAppView : public CCoeControl, public MDirectScreenAccess