| Forum List • Thread List • Refresh • New Topic • Search • Previous • Next 1 | 1. Better programmingstyle #3787 Posted by: 2004-04-09 20:47:58 | Hi, I?ve a problem with my current wxWidgets programmingstyle. I?ve only two classes (From the Minimal Sample, MyApp and MyFrame) and in this classes I?ve methodes like:
CreateMainMenu();
ClearMainMenu();
CreateOptionsMenu();
ClearOptionsMenu();
But two big classes are not good! I wood make for every Menu an own class. I?ve a few questions: Need every class an own eventtable? Must be every class I use in an eventtable derrivied from wxApp?
In my actuell classes I use this in much Controls, so I try to make a base class and derrivie the other menu classes from it. But I can?t acces to the wxFrame.
Knows someone a good designe Concept?
Thanks.
Greetings from Munich. | 2. Re: Better programmingstyle #3793 Posted by: 2004-04-10 16:29:53 | Ok, now I know that I need vor everey class an own Eventtable.
I have a class for the mainmenu, in it I create The mainframe. (wxFrame)
class MainMenu : public wxFrame{
};
The methodes for the buttons of the mainmenu:
void OnButton1(){
Menu2 *m = new Menu2(this);
} Then I?ve the Menu2 class:
class Menu2 : public wxFrame{
Menu2(wxWindow *parent){
wxButton *b = new wxButton(parent);
}
I hope you understand my problem.
Thanks.
Greetings from Munich. Max | 3. Re: Better programmingstyle #3795 Posted by: 2004-04-10 20:59:57 | Hi! Nope, to be honest: I don't understand your problem. Why would you create a class that should be a menu, like MainMenu, and derive it from wxFrame instead of wxMenu? Seriously: Have you worked with C++, Java or any other object oriented programming language before? The question is: Why would you want to derive a new class from a given one? Normally you will want to extend it's capabilities. So, you've got your own frame class, derivef from wxFrame, which resembles the frame you want with all the base functionality (and methods) wxFrame offers. You could go and create a new MyMenu class derived from wxMenu if you want, too, but I doubt that this makes much sense, because you don't add functionality to it.
Maybe wxGuide would be interesting to you. http://wxguide.sourceforge.net/ It deals with design aspects and gives some advise on programming style.
Need every class an own eventtable? Must be every class I use in an eventtable derrivied from wxApp? No, it doesn't have to have an eventtable. If you need one, declare it, otherwise don't. Events generated by derived classes which are not dealt with in the class itself will nornmally propagate to it's parent.
Sorry that I can't offer any good help at all. Try to be a little bit more concrete and I'll try. | 4. Re: Better programmingstyle #3798 Posted by: 2004-04-10 22:33:14 | Ok, i have wangled that I can now create the window with a pointer. (I don?t know what I?ve maked false)
Why would you create a class that should be a menu, like MainMenu, and derive it from wxFrame instead of wxMenu? Because I?ve thinked that every class, that I want to use in an Eventtable must be derrivied from wxFrame and I don?t know wxMenu. If I use an eventtable with only one class argument, I get a syntax error. (DeclareEventTable is in the definition of the class )
Seriously: Have you worked with C++, Java or any other object oriented programming language before? Yes I?ve and I?ve much more C++ experience as you seem to think.
No, it doesn't have to have an eventtable. If you need one, declare it, otherwise don't. Events generated by derived classes which are not dealt with in the class itself will nornmally propagate to it's parent. I wanted to aks that I can use 1Eventtable for many classes.
In the MainMenu class I create the Window:
class mainmenu : public wxFrame{
MainMenu(const wxString& title, const wxPoint& pos, const wxSize& size)
: wxFrame(frame, -1, title, pos, size)
{
}
wxFrame *frame;
ClearMenu(){
}
void OnMenu2Button();
}; Then I?ve a Class that should create other controls in the self window:
class Menu2 : public wxFrame{
Menu2(wxWindow *parent){
wxButton *b = new wxButton(parent,-1);
b->Show(TRUE);
}
ClearMenu(){
delete b;
}
}; MyProblem is the OnButton2 methode:
void MainMenu::OnButton2(){
ClearMenu();
Menu2 *m = new Menu2(frame); } The Menu2 ctor get the parent window as parameter and the controls use it, but the programm crashed.
My C++ is good enough, I think my English is to broken:), to explain my Problems.
| 5. Re: Better programmingstyle #3799 Posted by: 2004-04-10 22:39:07 | A comment in the definition of the class ahead was wrong, it should be:
class mainmenu : public wxFrame{
MainMenu(const wxString& title, const wxPoint& pos, const wxSize& size)
: wxFrame(frame, -1, title, pos, size)
{
}
wxFrame *frame;
ClearMenu(){
}
void OnMenu2Button();
};
| 6. Re: Better programmingstyle #3800 Posted by: 2004-04-10 22:47:17 | With menu I meant a window in that I create controls, I don?t mean the Windowmenu.
It should will be a VocabularyTrainer, so I?ve to clear the window Controls, like Buttons if I Create a new Submenu.
A Sample:
The MainMenu:
|-----------| | Button1 | | | |-----------|
Then I clear it and Create an new Control on the same postition: |-----------| | Button2 | | | |-----------| With one class no problem, because all methodes have acces of the frame in that the create,(all times the same frame) but with more classes (one class for every Sub-menu) I is hard. I give the window as parameter, but the programm crashed, maybe I?ll derrivie all Sub-Menus from the Mainmenu.
Thanks.
Greetings from Munich. | 7. Re: Better programmingstyle #3801 Posted by: 2004-04-11 01:02:51 | Hi!Because I?ve thinked that every class, that I want to use in an Eventtable must be derrivied from wxFrame and I don?t know wxMenu. You can set up event tables for all classes that were derived from wxEvtHandler. Since most controls are derived from it, you can use them in event tables. But there is no need to do so. You could use SetEventHanlder() or PushEvtHandler() and don't use event tables at all.
Yes I?ve and I?ve much more C++ experience as you seem to think. I didn't mean to offend you. If I did, I'm sorry and hope that you'll except my appology. I just wanted to be sure that I'm not dealing with a newbie who has some crud ideas... If you know what you want -> fine! :)
So, I think I'm getting on to it... You want a frame, maybe with a panel, display a button on it and when some action takes place you want to change the button. Well, if I got that right I still don't get why you need two wxFrames for that.
If you'd like to, mail me in german at upcaseATgmxDOTnet (sorry for this, but I currently can't login to my account, so there's no mailto).
upCASE | 8. Re: Better programmingstyle #3802 | Ich habe ein Fenster und will das beide Klassen (MainMenu + Menu2) in dieses Fenster schreiben. Deshalb übergebe ich dem Konstruktor von Menu2 die Adresse des Fensters(welches in MainMenu deklariert wurde). Wenn ich nun ein Controll in der Menu2 Klasse erstelle, welches ja das Frame aus der MainMenu Klasse per Parameterübergabe im Konstruktor erhalten hat, stürtz das Programm ab.
Danke. | 9. Re: Better programmingstyle #3803 | Zu den Posts oben und warum der Thread Better programmingstyle hei?t, ich habe im moment nur zwei gro?e Klassen in denen ich die unterschiedlichen Submenüs erstelle und die Klasse hat nun schon ohne Header! 600 Zeilen Code. Deshalb will ich für jedes Submenü eine eigene Klasse machen, doch alles Subenüs sollen in das selbe Fenster schreiben, es wird im Programm (Vokabeltrainer) kein einziges anderes Fenster err?ffnet. | 10. Re: Better programmingstyle #3814 Posted by: upCASE 2004-04-13 00:35:40 | Hi! Max: When I said "mail me in german", I meant mail me in german, not post to this thread in german. Next time please MAIL me, because I think that a forum should be accesible and understandable for everyone who visits.
Ok, I think by now I understood what you want to do. I'll try to explain it now, in case somebody else want to comment, too. Max is writing a vocabulary trainer that consists of one frame. During runtime there will be no other frames or dialogs. His "menu" is a set of controls, most likely buttons, he wants to be displayed in the main frame. Therefor, when creating Menu2, he passes the frame pointer on as the parent window for the controls. Problem is that when he tries to generate a control in Menu2 the program crashes. He named the thread "better programmingstyle" because his classes have more then 600 lines of code and he now wants to split the "menu" classes to seperate them.
I guess the problem is the logic of inheritance. Deriving the "menu" classes from wxFrame makes no sense at all. Think of it: You create one wxFrame derived class, e.g. MainMenu. Now you create a second wxFrame derived class, e.g. Menu2, that gets the pointer to the frame passed and stores it. So when you create a new instance of Menu2, you implicitly call the default constructor of wxFrame, meaning that there is another frame existing by now. I guess this is what crashes the program.
My advise: Rethink what you want to do and derive your menu classes from wxEventHandler if they just do event handling stuff. Maybe someone else can comment on that...
upCASE ----------------------------------- If it was hard to write, it should be hard to read!- Do. Or do not. There is no try! | 11. Re: Better programmingstyle #3846 | Sorry for posting in German I wont doing again, but I have hoped that there are more German members...
I will try what you said and if it doesn?t work, I will ask in an other Forum in German.
Thank you for your help MfG Max | Forum List • Thread List • Refresh • New Topic • Search • Previous • Next 1 |
|
|