| |
在Fep中处理指针事件的例子(下) |
|
时间: 2006-02-16 来自:Nokia |
 |
|
~~~ CExampleFepControl.h ~~~ //////////////// #if !defined(__E32BASE_H__) #include #endif
#if !defined(__W32STD_H__) #include #endif
#if !defined(__FRMTLAY_H__) #include #endif
#if !defined(__COEMAIN_H__) #include #endif
#if !defined(__COECNTRL_H__) #include #endif
#if !defined(__FEPBASE_H__) #include #endif
#if !defined(__FEPITFR_H__) #include #endif
#if !defined(__EIKDIALG_H__) #include #endif ////////////////
// Forward declarations class CExampleFep;
class CExampleFepControl : public CCoeControl, private MFepInlineTextFormatRetriever, MFepPointerEventHandlerDuringInlineEdit { private: //constructor CExampleFepControl(CExampleFep& aFep); void ConstructL(); void Draw(const TRect& /*aRect*/) const; public: static CExampleFepControl* NewL(CExampleFep& aFep); ~CExampleFepControl();
//From CCoeControl virtual TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType); virtual void HandlePointerEventL(const TPointerEvent& aPointerEvent); virtual void HandlePointerBufferReadyL(); // virtual TCoeInputCapabilities InputCapabilities() const; // from MFepInlineTextFormatRetriever virtual void GetFormatOfFepInlineText(TCharFormat& aFormat, TInt& aNumberOfCharactersWithSameFormat, TInt aPositionOfCharacter) const;
// from MFepPointerEventHandlerDuringInlineEdit virtual void HandlePointerEventInInlineTextL(TPointerEvent::TType aType, TUint aModifiers, TInt aPositionInInlineText);
public:
// New methods void HandleGainingForeground(); void HandleLosingForeground(); void HandleChangeInFocus(); void HandleDestructionOfFocusedItem();
// Start of inline text editing void StartInlineEditL(MCoeFepAwareTextEditor& aFepAwareTextEditor, const TDesC& aInitialInlineText, TInt aPositionOfInsertionPointInInlineText, TBool aCursorVisibility);
void CancelInlineEdit(MCoeFepAwareTextEditor& aFepAwareTextEditor); void UpdateInlineEditL(const TDesC& aNewInlineText, TInt aPositionOfInsertionPointInInlineText); void CommitInlineEditL(MCoeFepAwareTextEditor& aFepAwareTextEditor, TBool aCursorVisibility);
private: CExampleFep& iFep; TCoeInputCapabilities iInputCapabilities; TCursorSelection iUncommittedText; TInt iInsideInlineEditingTransaction; // Flag for editor inline editing };
~~~ CExampleFepControl.cpp ~~~ //////////////// #include #include //CEikonEnv #include //defines keys #include "fepexample.h" #include "fepcontrol.h" ////////////////
CExampleFepControl* CExampleFepControl::NewL(CExampleFep& aFep) { CExampleFepControl* self=new(ELeave) CExampleFepControl(aFep); CleanupStack::PushL(self); self->ConstructL(); CleanupStack::Pop(); //self return self; }
CExampleFepControl::~CExampleFepControl() { STATIC_CAST(CCoeAppUi*, iCoeEnv->AppUi())->RemoveFromStack(this); }
CExampleFepControl::CExampleFepControl(CExampleFep& aFep) :iFep(aFep), iInputCapabilities(TCoeInputCapabilities::ENone), iInsideInlineEditingTransaction(EFalse) { }
void CExampleFepControl::ConstructL() {
CreateWindowL(); SetNonFocusing(); EnableDragEvents(); DrawableWindow()->SetOrdinalPosition(0, ECoeWinPriorityFep); TPoint fepControlPos(0,201);
SetExtent(fepControlPos, TSize(208,100)); DrawableWindow()->SetExtentErr(fepControlPos, TSize(208,100)); DrawableWindow()->SetNonFading(ETrue);
DrawableWindow()->AllocPointerMoveBuffer(256, 0); DrawableWindow()->DisablePointerMoveBuffer();
STATIC_CAST(CCoeAppUi*, iCoeEnv->AppUi())->AddToStackL(this, ECoeStackPriorityFep, ECoeStackFlagSharable|ECoeStackFlagRefusesFocus);
}
void CExampleFepControl: raw(const TRect& /*aRect*/) const { CWindowGc& gc = SystemGc(); gc.SetBrushColor(TRgb(130,170,240)); gc.Clear(); }
void CExampleFepControl::StartInlineEditL(MCoeFepAwareTextEditor& aFepAwareTextEditor, const TDesC& aInitialInlineText, TInt aPositionOfInsertionPointInInlineText, TBool aCursorVisibility) { aFepAwareTextEditor.StartFepInlineEditL(aInitialInlineText, aPositionOfInsertionPointInInlineText, aCursorVisibility, NULL, *this, *this);
iInsideInlineEditingTransaction = ETrue; }
void CExampleFepControl::UpdateInlineEditL(const TDesC& aNewInlineText, TInt aPositionOfInsertionPointInInlineText) { iInputCapabilities.FepAwareTextEditor()->UpdateFepInlineTextL(aNewInlineText, aPositionOfInsertionPointInInlineText); }
void CExampleFepControl::CancelInlineEdit(MCoeFepAwareTextEditor& aFepAwareTextEditor) { aFepAwareTextEditor.CancelFepInlineEdit(); iInsideInlineEditingTransaction = EFalse; }
void CExampleFepControl::CommitInlineEditL(MCoeFepAwareTextEditor& aFepAwareTextEditor, TBool aCursorVisibility) { aFepAwareTextEditor.SetInlineEditingCursorVisibilityL(aCursorVisibility); iInsideInlineEditingTransaction = EFalse; aFepAwareTextEditor.CommitFepInlineEditL(*iCoeEnv); aFepAwareTextEditor.GetCursorSelectionForFep(iUncommittedText); }
void CExampleFepControl::GetFormatOfFepInlineText(TCharFormat& /*aFormat*/, TInt& /*aNumberOfCharactersWithSameFormat*/, TInt /*aPositionOfCharacter*/) const {
}
void CExampleFepControl::HandlePointerEventInInlineTextL(TPointerEvent::TType /*aType*/, TUint /*aModifiers*/, TInt /*aPositionInInlineText*/) {
}
TKeyResponse CExampleFepControl::OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aEventCode) { if (iFep.IsSimulatingKeyEvent()) { return EKeyWasNotConsumed; } if (!iFep.IsOn() || iInputCapabilities.IsNone()) { return EKeyWasNotConsumed; }
if (aEventCode != EEventKey) return EKeyWasNotConsumed;
return EKeyWasNotConsumed; }
void CExampleFepControl::HandlePointerBufferReadyL() { CEikonEnv::Static()->InfoMsg(_L("HandlePointerBufferReadyL")); TPoint pnts[256]; TPtr8 ptr((TUint8 *)&pnts,sizeof(pnts)); TInt numPnts=Window().RetrievePointerMoveBuffer(ptr);
TSize penSize; penSize.SetSize(3,3);
CWindowGc& gc=SystemGc(); gc.SetPenSize(penSize);
for(TInt index=0;index{ gc.DrawLineTo(pnts[index]); }
}
void CExampleFepControl::HandlePointerEventL(const TPointerEvent& aPointerEvent) { switch (aPointerEvent.iType) { case TPointerEvent::EButton1Down: { DrawableWindow()->EnablePointerMoveBuffer(); break; } case TPointerEvent::EButton1Up: { DrawableWindow()->DisablePointerMoveBuffer(); break; } default: break; } }
void CExampleFepControl::HandleGainingForeground() { DrawableWindow()->MoveToGroup(iCoeEnv->WsSession().GetFocusWindowGroup()); MakeVisible(EFalse); }
void CExampleFepControl::HandleLosingForeground() {
}
void CExampleFepControl::HandleChangeInFocus() { // Get the newly focused control capability iInputCapabilities = STATIC_CAST(const CCoeAppUi*, iCoeEnv->AppUi())->InputCapabilities();
// check & process the current capability underneath if (iInputCapabilities.IsNone()) { return ; } else { ActivateL(); CEikonEnv::Static()->InfoMsg(_L("Text Input")); } }
运行时,point event 不能进入 HandlePointerEventL() 和 HandlePointerBufferReadyL() 。
|
|
|
|
|
|
|
|