Доброе время суток.
Cтолкнулась тут с проблемой, когда на форме нет ничего (wxPanel) то координаты мыши определяются замечательно, а когда ставлю панели, то все перестает работать.
А координаты очень надо определить именно на панели. может кто сталкивался с этой проблемой. помогите плз.
Координаты определяю с помощью wxGetMousePosition(&x, &y);
не определяются координаты мыши Topic is solved
-
- Earned a small fee
- Posts: 15
- Joined: Sun Jun 29, 2008 8:27 pm
- Contact:
- T-Rex
- Moderator
- Posts: 1249
- Joined: Sat Oct 23, 2004 9:58 am
- Location: Zaporizhzhya, Ukraine
- Contact:
Code: Select all
class MyPanel : public wxPanel
{
public:
MyPanel(wxWindow * parent)
: wxPanel(parent, wxID_ANY)
{
Connect(wxEVT_PAINT, wxPaintEventHandler(MyPanel::OnPaint));
Connect(wxEVT_MOTION, wxMouseEventHandler(MyPanel::OnMouseMove));
}
void OnMouseMove(wxMouseEvent & event)
{
if(event.LeftIsDown()) Refresh();
}
void OnPaint(wxPaintEvent & event)
{
wxPaintDC dc(this);
dc.SetBackground(wxBrush(GetBackgroundColour()));
dc.Clear();
wxPoint pos = wxGetMousePosition();
pos = ScreenToClient(pos);
dc.SetFont(GetFont());
dc.DrawLabel(wxString::Format(wxT("%i, %i"), pos.x, pos.y),
wxRect(dc.GetSize()),
wxALIGN_CENTER);
}
};
Добрый день!
Возможно, я упускаю из виду что-то фундаментально простое, но никак не могу понять что здесь не так.
Пример похож на тот, что описан в первом сообщении этой темы. Однако на wxPanel используются две wxStaticText-a. Пытаюсь засечь движения мыши по панели, и координаты отображать в этих двух "лабельках".
Но... ничего почему-то не выходит. Может кто-нибудь указать на "прорехи"?
Это main.cpp:
main.h:
Возможно, я упускаю из виду что-то фундаментально простое, но никак не могу понять что здесь не так.
Пример похож на тот, что описан в первом сообщении этой темы. Однако на wxPanel используются две wxStaticText-a. Пытаюсь засечь движения мыши по панели, и координаты отображать в этих двух "лабельках".
Но... ничего почему-то не выходит. Может кто-нибудь указать на "прорехи"?
Это main.cpp:
Code: Select all
#include "main.h"
IMPLEMENT_APP(wxTest)
bool wxTest::OnInit()
{
MainFrame *frame = new MainFrame(wxT("Window Title"));
frame->Show(TRUE);
SetTopWindow(frame);
return TRUE;
}
MainFrame::MainFrame(const wxString& title)
:wxFrame(NULL, -1, title)
{
wxPanel *panel = new wxPanel(this, wxID_ANY);
wxBoxSizer *vbox = new wxBoxSizer(wxVERTICAL);
panel->SetSizer(vbox);
xPos = new wxStaticText(panel, wxID_ANY, wxT("X: _"));
yPos = new wxStaticText(panel, wxID_ANY, wxT("Y: _"));
vbox->Add(xPos, wxSizerFlags(0).Align(1));
vbox->Add(yPos, wxSizerFlags(0).Align(1));
SetSize(500, 300);
panel->Connect(wxID_ANY, wxEVT_MOTION,
wxMouseEventHandler(MainFrame::onMouseMove));
Center();
}
void MainFrame::onMouseMove(wxMouseEvent& event)
{
wxPoint p = wxGetMousePosition();
p = ScreenToClient(p);
xPos->SetLabel(wxString::Format(wxT("X: %d"), p.x));
yPos->SetLabel(wxString::Format(wxT("X: %d"), p.y));
}
Code: Select all
#include "wx/wx.h"
#include "wx/event.h"
class wxTest: public wxApp
{
virtual bool OnInit();
};
class MainFrame: public wxFrame
{
public:
MainFrame(const wxString& title);
void onMouseMove(wxMouseEvent& event);
private:
wxStaticText *xPos, *yPos;
};
- T-Rex
- Moderator
- Posts: 1249
- Joined: Sat Oct 23, 2004 9:58 am
- Location: Zaporizhzhya, Ukraine
- Contact:
Т.к. ты конектишь обработчик к панели, то внутри него this указывает не на форму, а на wxPanel. Для того чтобы получить доступ к лэйбам, тебе надо event.GetEventObject() закастить через wxDynamicCast к wxWindows, а потом от этого окна взять wxGetTopLevelParent() или как-то так и опять через wxDynamicCast закастить его к классу твоей формы.
Вот поэтому для использования обработчиков событий лучше сабкласиться, а не навешивать чужие функции.
Вот поэтому для использования обработчиков событий лучше сабкласиться, а не навешивать чужие функции.