Symbia源代码还原 void CCoeControl::ActivateL(void)
2010-03-04 16:22:00 来源:WEB开发网ActivateL是个好东西,好多人都想知道其内部实现,可惜苦于没有源代码。现在我把逆向代码贴出来,让大家一饱眼福,呵呵。错误在所难免。
RDrawableWindow* iWin;
CCoeControl::OwnsWindow() Tests if the control is window-owning...
CCoeControl::CapturesPointer() Tests whether pointer capture is set for the control.This returns true if SetPointerCapture() has been called with aCapture=ETrue.
CCoeControl::IsReadyToDraw() Tests if the control is ready for drawing.This returns true if the control has been activated and is visible
RWsSession::PurgePointerEvents() Removes all pointer events waiting to be delivered to this session.The events are removed from the event queue without being processed. This might occur, for example, at application startup.
CCoeControl::IsBackedUp() Tests if the window owned by the control is a backed-up window.
=================================================================================
void CCoeControl::ActivateL(void)
{
if(iFlags & 0x80000)
{
User::LeaveNoMemory();
}
if(EFalse == IsActivated)
{
iFlags |= 0x10; //set to active
if( OwnsWindow() ) //Tests if the control is window-owning...
{
iWin->Activate();
if(CapturesPointer())
{
if(IsReadyToDraw())
{
//Removes all pointer events waiting to be delivered to this session.
//The events are removed from the event queue without being processed.
//This might occur, for example, at application startup.
iCoeEnv->WsSession()->PurgePointerEvents();
}
}
if(IsBackedUp())
{
DrawNow();
}
}
//Some codes here....
//RCoeDynamicDataStorage相关操作,这个类并没有任何资料,
//所以关于这个类的相关操作,我们无从得知。
}
TInt ctrlCounts = CountComponentControls();
TInt index = 0 ;
while(index < ctrlCounts)
{
CCoeControl* subCtrlPtr = ComponentControl(index);
subCtrlPtr->ActivateL();
index++;
}
}
更多精彩
赞助商链接