Hi Wei, it does not work in the first case because you did not implement a ProcessMessage() method for MainFrame that will handle the kCM_TAB event. By default widget events are send to the widgets parent frame. In case 1 that is MainFrame, while in case 2 it is "this" which is Monitor, which has a good ProcessMessage() method. However, it is very simple to change the message handling frame. Just use the Associate() method to associate a message handler to a widget. So to get case 1 to work properly add the line: SelectPC->Associate(this); The TGTab appears in MainFrame, but its messages are handled by "this". Cheers, Fons. > Dear Rooters > > The attached 2 simple codes are almost the same with each other except > that the 1st one (i.e. o1.h, o1.c) define a 'MainFrame' and add the TGTab > object 'SelectPC' inside the 'MainFrame', e.g. > > MainFrame=new TGCompositeFrame(this,100,100,kHorizontalFrame); > SelectPC = new TGTab(MainFrame, 300,300); SelectPC->Associate(this); // add this line > ..................... > MainFrame->AddFrame(SelectPC,PCLayout); > > while the 2nd one(i.e. o2.c, o2.h) do the following: > > SelectPC = new TGTab(this,300,300); > ..................... > AddFrame(SelectPC,PCLayout); > > In the 2nd case, the keyword 'kCM_TAB' in implementation > 'ProcessMessage' really works when click each tab with mouse, > and give messages like "Tab unit 1 is activated". > In the 1st case, it does not work. > Could you tell me the reason ? -- Org: CERN, European Laboratory for Particle Physics. Mail: 1211 Geneve 23, Switzerland Phone: +41 22 7679248 E-Mail: Fons.Rademakers@cern.ch Fax: +41 22 7677910
This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:34:40 MET