Home » U++ Library support » U++ Callbacks and Timers » THISBACK and inheritance
THISBACK and inheritance [message #48426] |
Mon, 03 July 2017 16:15 |
rafiwui
Messages: 105 Registered: June 2017 Location: Stuttgart, Germany
|
Experienced Member |
|
|
I had an interesting issue with a MenuBar and a THISBACK.
I made three classes: MenuBarWindow, FnWindow and MyWindow.
- MenuBarWindow only has the MenuBar attribute and the method I want as its callback.
- FnWindow inherits from MenuBarWindow and has some buttons for the F1-F8 keys and the corresponding callback methods.
- MyWindow inherits from FnWindow and is the main window in my application.
Here is an example code:
class MenuBarWindow : public TopWindow
{
protected:
MenuBar m_menuBar;
public:
typedef MenuBarWindow CLASSNAME;
MenuBarWindow(int _sizeX, int _sizeY);
protected:
virtual void MenuBarMain(Bar& _bar) = 0;
};
MenuBarWindow::MenuBarWindow(int _sizeX, int _sizeY)
{
SetRect(0, 0, Zx(_sizeX), Zy(_sizeY + m_menuBar.GetStdHeight(m_menuBar.GetFont())));
AddFrame(m_menuBar);
m_menuBar.Set(THISBACK(MenuBarMain));
}
class FnWindow : public MenuBarWIndow
{
protected:
Button b_fn1;
// ...
Button b_fn8;
public:
typedef FnWindow CLASSNAME;
FnWindow(int _sizeX, int _sizeY);
private:
virtual void OnClickFn1() = 0;
// ...
virtual void OnClickFn8() = 0;
};
FnWindow::FnWindow(int _sizeX, int _sizeY)
: MenuBarWindow(_sizeX, _sizeY)
{
// Adding buttons here...
b_fn1 <<= THISBACK(OnClickFn1);
// ...
b_fn8 <<= THISBACK(OnClickFn8);
}
// MyWindow header...
MyWindow::MyWindow(int _sizeX, int _sizeY)
: FnWindow(_sizeX, _sizeY)
{
// do sth...
}
In the MyWindow files are declarations and definitions for the virtual methods.
If I run this the program stops and shows me this and exits the application when you continue:
If I remove virtual void MenuBarMain(Bar& _bar) = 0; and move m_menuBar.Set(THISBACK(MenuBarMain)); from MenuBarWindow to MyWindow everything works fine.
At first I thought this is because the method is pure virtual and needs an implementation in the class from where I call it or use THISBACK but then I should get this strange behaviour after my changes as well because I do the same with the button callbacks but they work perfectly.
So does anyone has an idea why this is happening? Is this a generell C++ thing or is it a U++ thing?
Greetings
Daniel
|
|
|
Goto Forum:
Current Time: Fri Mar 29 05:52:10 CET 2024
Total time taken to generate the page: 0.01128 seconds
|