Discussion Board

Results 1 to 4 of 4
  1. #1
    Registered User Kolayuk's Avatar
    Join Date
    Mar 2010
    Posts
    42
    Нужно сделать CAknButton с поддержкой Drag&Drop, я решил отнаследоваться от CAknButton и переопределить HandlePointerEventL, но при создании кнопки ловится KERN EXEC 3

    Ресурс:
    Code:
    RESOURCE AVKON_BUTTON r_move_button
        {
        flags  = 0;
        states =
                {
                AVKON_BUTTON_STATE
                    {
                    txt = "My text";
                    helptxt = "Help text";
                    }  
                };
    }
    Хидер:
    Code:
    #ifndef MOVERBUTTON_H
    #define MOVERBUTTON_H
    
    // INCLUDES
    #include <e32std.h>
    #include <e32base.h>
    #include <aknbutton.h>
    
    
    // CLASS DECLARATION
    class CMoverButton : public CAknButton
    	{
    public:
    	~CMoverButton();
    	static CMoverButton* NewL(TCallBack,RWindowGroup*);
    	static CMoverButton* NewLC(TCallBack,RWindowGroup*);
    
    private:
    	CMoverButton();
    	void ConstructL(TCallBack,RWindowGroup*);
    	void HandlePointerEventL(const TPointerEvent& aPointerEvent);
    	TCallBack iCallBack;
    	TPoint iMovePoint;
    	};
    
    #endif // MOVERBUTTON_H
    .cpp:
    Code:
    #include "MoverButton.h"
    #include <aknbutton.h>
    #include <Tap2PlayAppUi.h>
    #include <Tap2Play.rsg>
    CMoverButton::CMoverButton(): CAknButton(0) //CAknButton(TInt aFlags)
    	{
    	}
    
    CMoverButton::~CMoverButton()
    	{
    	}
    
    CMoverButton* CMoverButton::NewLC(TCallBack aCall,RWindowGroup* aWg)
    	{
    	CMoverButton* self = new (ELeave) CMoverButton();
    	CleanupStack::PushL(self);
    	self->ConstructL(aCall,aWg);
    	return self;
    	}
    
    CMoverButton* CMoverButton::NewL(TCallBack aCall,RWindowGroup* aWg)
    	{
    	CMoverButton* self = CMoverButton::NewLC(aCall,aWg);
    	CleanupStack::Pop(); // self;
    	return self;
    	}
    
    void CMoverButton::ConstructL(TCallBack aCall,RWindowGroup* aWg)
    	{
    	iCallBack=aCall;
    	ConstructFromResourceL(R_MOVE_BUTTON); // тут KERN EXEC 3, как я думаю потому что кнопка уже инициализирована в конструкторе
    	CreateWindowL(aWg);
    	SetPointerCapture(ETrue);
    	EnableDragEvents();
    	}
    void CMoverButton::HandlePointerEventL(const TPointerEvent& aPointerEvent)
    	{
    	if (aPointerEvent.iType == TPointerEvent::EButton1Down)
    	        {
    	        iMovePoint = aPointerEvent.iPosition;
    	        }
    	else if (aPointerEvent.iType == TPointerEvent::EDrag)
    	       {
    	       ((CTap2PlayAppUi*)CEikonEnv::Static()->AppUi())->MoveButtons(aPointerEvent.iPosition); //знаю что страшно, потом переделаю на M-класс 
    	       iMovePoint = aPointerEvent.iPosition;
    	       DrawNow();
    	       }
    	CAknButton::HandlePointerEventL(aPointerEvent); // или лучше вызвать реализацию метода в CCoeControl? но тогда события от нажатия кнопки ловиться не будут
    	}
    Использую так:
    Code:
    	iMoveButton=CMoverButton::NewL(TCallBack(Drag,this),iWinGroup); // iMoveButton объявлен как CAknButton
    	iMoveButton->SetRect(rect_move); // до сюда уже не доходит, падает при создании класса. 
    	iMoveButton->ActivateL();
    Посмотреть какой из указателей NULL к сожалению не могу, т.к запускается это все в эмуляторе 9.4, а он падает сразу, при возникновении паники, не выдавая стек вызовов и значения переменных (в отличие от эмулятора 9.1)

  2. #2
    Nokia Developer Moderator A.A.M.'s Avatar
    Join Date
    Jan 2008
    Location
    Moscow, Russia
    Posts
    3,308
    Quote Originally Posted by Kolayuk View Post
    iMoveButton объявлен как CAknButton
    А почему не как CMoverButton?

  3. #3
    Registered User Ktulhu's Avatar
    Join Date
    Sep 2009
    Posts
    33
    Посмотреть какие значения принимают переменные можно даже и в таком, казалось бы, безнадёжном случае, если записывать нужные события в файл протокола.

    Плюс ещё один вопрос. А обычная CAknButton в том же контексте создаётся нормально?

  4. #4
    Registered User Kolayuk's Avatar
    Join Date
    Mar 2010
    Posts
    42
    Да, обычная кнопка CAknButton создается отлично...
    A.A.M. Говорит что невозможно преобразовать CAknButton к CMoverButton.

    Впрочем проблему уже решил (страшно с точки здения архитектуры правда, но работает) - перехватив нужный эвент в HandleWsEventL AppUi класса.

Similar Threads

  1. CAknButton problem
    By birch01 in forum Symbian User Interface
    Replies: 3
    Last Post: 2011-10-04, 08:18
  2. caknbutton
    By Krish123 in forum Symbian C++
    Replies: 4
    Last Post: 2011-03-03, 11:09
  3. CAknButton problem
    By kkc_123 in forum Symbian User Interface
    Replies: 2
    Last Post: 2010-03-11, 05:04
  4. SetTextColorIds() of caknbutton
    By shafali gupta in forum Symbian C++
    Replies: 1
    Last Post: 2009-10-15, 12:44
  5. A problem about CAknButton
    By yaoguangle in forum Symbian User Interface
    Replies: 2
    Last Post: 2009-02-24, 08:19

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Nokia Developer aims to help you create apps and publish them so you can connect with users around the world.

京ICP备05048969号  © Copyright Nokia 2013 All rights reserved