LINUX.ORG.RU

[Fox-toolkit] как добавить новый объект в FXComposite ?


0

0

Мне необходимо добавить новый элемент в фрейм (Composite) Причем сделать это после того как этот фрейм уже создан

В данном примере при нажатии кнопки вызывается команда onCmdButtonPressed которая вставляет новую кнопку , но она не прорисовывается !!! что надо сделать ??

#include<iostream> #include "fx.h" class MyWindow : public FXMainWindow { FXDECLARE(MyWindow) MyWindow() {}; public: MyWindow(FXApp *); long onCmdButtonPressed(FXObject * obj ,FXSelector sel ,void* ptr); virtual void create(); virtual ~MyWindow(){} enum { ID_BUTTON=FXMainWindow::ID_LAST };

FXVerticalFrame* frame_; };

/////////////// Event MAP FXDEFMAP(MyWindow) MyWindowMap[]={ FXMAPFUNC(SEL_COMMAND, MyWindow::ID_BUTTON, MyWindow::onCmdButtonPressed), };

FXIMPLEMENT(MyWindow,FXMainWindow,MyWindowMap,ARRAYNUMBER(MyWindowMap)) MyWindow::MyWindow(FXApp * a) :FXMainWindow(a,"Window",NULL,NULL,DECOR_ALL,0,0,800,600) { frame_=new FXVerticalFrame(this,LAYOUT_FILL_X|LAYOUT_FILL_Y); new FXButton(frame_,"&Test Button",NULL,this,MyWindow::ID_BUTTON); new FXButton(frame_,"&Test Button",NULL,this,MyWindow::ID_BUTTON);

}

void MyWindow::create(){ FXMainWindow::create(); show(PLACEMENT_SCREEN); }

long MyWindow::onCmdButtonPressed(FXObject * obj ,FXSelector sel ,void* ptr) {

FXButton* b=new FXButton(frame_,"&Test Button",NULL,this,MyWindow::ID_BUTTON); std::cout<<"new Button addr="<<static_cast<void*> (b)<<std::endl; //////////////////////////////////////////// // кнопка создана но она не рисуется /////////////////////////////////////////// return 1; } int main(int argc,char ** argv) { FXApp application("Tutorial #1","FOX Tutorials");

application.init(argc,argv);

new MyWindow(&application);

application.create();

return application.run(); } //////////////////////////////////////////////////////////////////// //// под линукс компилить g++ -o test mywindow.cc -I/usr/include/fox-1.2 -L/usr/X11R6/lib -lFOX-1.2 -lX11 -lXext -lm

anonymous

/////////////////////////////////////////////
Читабельный Листинг
/////////////////////////////////////////////
#include<iostream>

#include "fx.h"

class MyWindow : public FXMainWindow {

FXDECLARE(MyWindow)

MyWindow() {};

public:

MyWindow(FXApp *);

long onCmdButtonPressed(FXObject * obj ,FXSelector sel ,void* ptr);

virtual void create();

virtual ~MyWindow(){}

enum

{

ID_BUTTON=FXMainWindow::ID_LAST

};




FXVerticalFrame* frame_;

};



/////////////// Event MAP

FXDEFMAP(MyWindow) MyWindowMap[]={

FXMAPFUNC(SEL_COMMAND, MyWindow::ID_BUTTON,

MyWindow::onCmdButtonPressed),

};



FXIMPLEMENT(MyWindow,FXMainWindow,MyWindowMap,ARRAYNUMBER(MyWindowMap))

MyWindow::MyWindow(FXApp * a)
:FXMainWindow(a,"Window",NULL,NULL,DECOR_ALL,0,0,800,600)

{

frame_=new FXVerticalFrame(this,LAYOUT_FILL_X|LAYOUT_FILL_Y);

new FXButton(frame_,"&Test Button",NULL,this,MyWindow::ID_BUTTON);

new FXButton(frame_,"&Test Button",NULL,this,MyWindow::ID_BUTTON);


}


void MyWindow::create(){

FXMainWindow::create();

show(PLACEMENT_SCREEN);

}


long MyWindow::onCmdButtonPressed(FXObject * obj ,FXSelector sel ,void* ptr) {


FXButton* b=new FXButton(frame_,"&Test

Button",NULL,this,MyWindow::ID_BUTTON);

std::cout<<"new Button addr="<<static_cast<void*> (b)<<std::endl;

////////////////////////////////////////////

// кнопка создана но она не рисуется

///////////////////////////////////////////


return 1;

}


int main(int argc,char ** argv) {


FXApp application("Tutorial #1","FOX Tutorials");




application.init(argc,argv);



new MyWindow(&application);


application.create();


return application.run();

}

////////////////////////////////////////////////////////////////////

//// под линукс компилить

g++ -o test mywindow.cc -I/usr/include/fox-1.2 -L/usr/X11R6/lib -lFOX-1.2 -lX11 -lXext -lm

anonymous
()
Ответ на: комментарий от anonymous

long MyWindow::onCmdButtonPressed(FXObject * obj ,FXSelector sel ,void* ptr) {
      FXButton* b=new FXButton(frame_,"&Test Button",NULL,this,MyWindow::ID_BUTTON);
      b->create();
      frame_->layout();
      return 1;
}

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.