Hi, I'm trying to run the following simple GUI example in order to understand how does the function ProcessMessage() work. I read that when a button is pressed, the message (kC_COMMAND, kCM_BUTOON,button_id,...) is sent and when an item from the listbox is selected, the message (kC_COMMAND, kCM_LISTBOX, listbox_id, item_id) is sent. Still the ProcessMessage() of the following code is never called even if I press one of the button or click an item in the list box. Why? within root: I link the file with .L ~/.../... then I type main() code: class MyMainFrame : public TGMainFrame { private: TGTextButton *fButton1, *fButton2; TGLayoutHints *fLayout; TGListBox *fListbox; public: MyMainFrame(const TGWindow *p, UInt_t w, UInt_t h); ~MyMainFrame(); Bool_t ProcessMessage(Long_t msg, Long_t parm1, Long_t parm2); }; MyMainFrame::MyMainFrame(const TGWindow *p, UInt_t w, UInt_t h) : TGMainFrame(p, w, h) { // set the cmd string, cmd is a string that calls the processmessage method when any of the button is called char cmd[128]; sprintf(cmd, "{long r__ptr=0x%x; ((MyMainFrame*)r__ptr)->ProcessMessage($MSG,$PARM1,$PARM2);}", this); fLayout = new TGLayoutHints(kLHintsCenterX | kLHintsCenterY); fButton1 = new TGTextButton(this, "&Version", 1); AddFrame(fButton1, fLayout); fButton1->Associate(this); fButton2 = new TGTextButton(this, "&Exit", 2); AddFrame(fButton2, fLayout); fButton2->Associate(this); fListBox = new TGListBox(this, 3); fListBox->Associate(this); AddFrame(fListBox, fLayout); fListBox->Resize(180,200); fListBox->AddEntry("entry 1", -1 ); fListBox->AddEntry("entry 2", -1 ); fListBox->AddEntry("entry 3", -1 ); fListBox->AddEntry("entry 4", -1 ); fListBox->MapSubwindows(); fListBox->Layout(); MapSubwindows(); SetWindowName("Listbox test"); Resize( GetDefaultSize()); MapWindow(); } MyMainFrame::~MyMainFrame() { delete fListBox; delete fButton2; delete fButton1; delete fLayout; } Bool_t MyMainFrame::ProcessMessage(Long_t msg, Long_t parm1, Long_t) { // Process events generated by the buttons in the frame. cout<<"entering processmesg"<<endl; switch (GET_MSG(msg)) { case kC_COMMAND: cout<<"entering kcCommand switch"<<endl; switch (GET_SUBMSG(msg)) { case kCM_BUTTON: printf("text button id %ld pressed\n", parm1); break; case kCM_LISTBOX: printf("item id %ld selected from listbox id %ld \n", parm2, parm1); break; default: break; } default: break; } return kTRUE; } void main() { mainWin = new MyMainFrame(gClient->GetRoot(), 600, 600); }
This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:27 MET