Вопрос по использованию CDirectScreenAccess от Symbian dev

В последнее время я изучаю разработку 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 ответа

Решение

Ваш CMySnakeAppView должно происходить из MDirectScreenAccess - похоже, вы уже внедрили правильные методы, вы просто пропустили объявление:

class CMySnakeAppView : public CCoeControl, public MDirectScreenAccess

Вы не можете передать * это, потому что это не istance класса MDirectScreenAccess и не istance класса, который наследуется от него. Вы можете разыграть его вручную, но это ошибка. Вы должны создать класс, который наследуется от MDirectScreenAccess, и оттуда собрать iDSA. Посмотрите здесь:

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

Другие вопросы по тегам