I am having trouble overriding the virtual functions from the parent class Label. Can anyone please help me on what the correct syntax for the declaration and implementation of OnMouseEnter, OnMouseDown, OnMouseLeave, OnMouseUp etc.
using namespace System;
using namespace System::Collections;
using namespace System::Linq;
using namespace System::Text;
using namespace System::Drawing;
using namespace System::Windows::Forms;
namespace SliderControl{
ref class SliderButton : public Label {
protected:
void OnMouseEnter(EventArgs^);
void OnMouseLeave(EventArgs^);
void OnMouseDown(EventArgs^);
void OnMouseUp(EventArgs^);
void OnPaint(PaintEventArgs^);
private:
System::Drawing::Image^ backgroundImage;
System::Drawing::Image^ pressedImage;
bool pressed;
bool _over;
public:
SliderButton();
~SliderButton();
void CheckEnterOrLeave(int, int);
bool IsPressed();
System::Drawing::Image^ SetBackgroundImage(System::Drawing::Image^);
System::Drawing::Image^ SetPressedImage(System::Drawing::Image^);
};
SliderButton::SliderButton(){
pressed = false;
_over = false;
}
SliderButton::~SliderButton(){
}
void SliderButton::CheckEnterOrLeave(int x, int y)
{
bool overControl = x >= this->Location.X &&
x <= this->Location.X + this->Width &&
y >= this->Location.Y &&
y <= this->Location.Y + this->Height;
if (overControl && !_over)
{
this->OnMouseEnter(gcnew EventArgs());
}
else if(!overControl && _over)
{
this->OnMouseLeave(gcnew EventArgs());
}
}
// Property for the background image to be drawn behind the button text.
Image^ SliderButton::SetBackgroundImage(System::Drawing::Image^ im){
backgroundImage = im;
}
// Property for the background image to be drawn behind the button text when
// the button is pressed.
Image^ SliderButton::SetPressedImage(System::Drawing::Image^ im){
pressedImage = im;
}
bool SliderButton::IsPressed()
{
return pressed;
}
override void SliderButton::OnMouseEnter(EventArgs^ e)
{
_over = true;
Label::OnMouseEnter(e);
}
override void SliderButton::OnMouseLeave(EventArgs^ e)
{
_over = false;
Label::OnMouseLeave(e);
}
// When the mouse button is pressed, set the "pressed" flag to true
// and invalidate the form to cause a repaint. The .NET Compact Framework
// sets the mouse capture automatically.
override void SliderButton::OnMouseDown(MouseEventArgs^ e)
{
pressed = true;
this->Invalidate();
Label::OnMouseDown(e);
}
// When the mouse is released, reset the "pressed" flag
// and invalidate to redraw the button in the unpressed state.
override void SliderButton::OnMouseUp(MouseEventArgs^ e)
{
pressed = false;
this->Invalidate();
Label::OnMouseUp(e);
}
// Override the OnPaint method to draw the background image
override void SliderButton::OnPaint(PaintEventArgs^ e)
{
if (this.pressed && this.pressedImage != null)
e.Graphics.DrawImage(this.pressedImage, 0, 0);
else
e.Graphics.DrawImage(this.backgroundImage, 0, 0);
Label::OnPaint(e);
}
}
also, I am basically porting this code over from a C# class I had written, can anyone tell me if I am using the parent class correctly:
Label::OnPaint(e);
Thanks for your time and expertise.