用codeblocks编译wxwidget项目,自绘了一个滑动条,想在main.cpp里获取实时数据实现相关功能,试过用wxEVT_SCROLL_THUMBTRACK绑定事件没有成功。
不知道如果想在main.cpp里实时获取自绘滑动条cpp里的数据应该怎么操作,希望大家能为我解答,谢谢!
main.cpp中相关代码:(r只能打出初始值0,无法实时获取)
slider1 = new mywxSlider(top, wxColour(146,168,209), wxID_ANY);
slider1 -> mslider -> bar_bg(barbg) -> pre_bg(prebg) -> hover_bg(hoverbg);
slider1 -> Show();//滑动条显示
s1->Add(slider1, 0, wxALL, 30);
int r;
slider1 -> mslider -> Update();
slider1 -> mslider -> Refresh();
r = slider1 -> mslider -> p1;
cout << "r=" << r << endl;
不知道你这个问题是否已经解决, 如果还没有解决的话:首先,需要在mySlider类中添加一个新的事件,当滑动条数值改变时触发该事件。
// 自定义事件
wxDEFINE_EVENT(SLIDER_EVENT, wxCommandEvent);
class mySlider : public wxControl {
public:
mySlider(wxWindow *parent, wxWindowID winid, int value, int minValue, int maxValue, const wxPoint &pos = wxDefaultPosition, const wxSize &size = wxDefaultSize);
int GetValue() const {
return m_value;
}
void SetValue(int value) {
if (value < m_minValue) {
value = m_minValue;
}
if (value > m_maxValue) {
value = m_maxValue;
}
m_value = value;
UpdateThumb();
Refresh();
// 触发自定义事件
wxCommandEvent evt(SLIDER_EVENT, GetId());
evt.SetInt(value);
GetEventHandler()->AddPendingEvent(evt);
}
//...
};
然后在MyFrame类的构造函数中,将SLIDER_EVENT事件绑定到处理函数OnSlider中:
MyFrame::MyFrame(const wxString& title)
: wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(450, 340))
{
//...
Connect(GetId(), SLIDER_EVENT, wxCommandEventHandler(MyFrame::OnSlider), NULL, this);
//...
}
最后,在OnSlider函数中处理滑动条的值变化,并做出相应的处理。
void MyFrame::OnSlider(wxCommandEvent& event)
{
int value = event.GetInt(); // 获取滑动条的数值
// TODO: 根据数值做出相应处理
}