如何在wxStaticText取得滑鼠Event

这是wxWidgets论坛的中文版本。在这里,您可以用您的母语汉语讨论上面任一子论坛所涉及的所有关于wxWidgets的话题。欢迎大家参与到对有价值的帖子的中英互译工作中来!
sishui
Earned some good credits
Earned some good credits
Posts: 121
Joined: Mon Mar 10, 2008 6:13 am
Location: 中國

Post by sishui »

HeMason wrote:我改成這樣了!
錯誤訊息只剩:
'HeLnkText::{ctor}' : 建構函式不允許傳回型別

這是什麼意思?
---------------------------------------------------------

class HeLnkText : public wxStaticText
{
public:
HeLnkText( wxWindow* parent, const wxString& label,
const wxPoint& pos = wxDefaultPosition,
long style = 0, const wxString& name = "staticText") ;

wxStaticText *m_text ;

void OnMouseEvent( wxMouseEvent& event );
}

HeLnkText::HeLnkText( wxWindow* parent, const wxString& label,
const wxPoint& pos,
long style, const wxString& name)
{

m_text = new wxStaticText( parent, wxID_ANY, label, pos, wxDefaultSize, style, name) ;

m_text->Connect(wxID_ANY, wxEVT_LEFT_DOWN, wxMouseEventHandler(HeLnkText::OnMouseEvent), NULL, this);
m_text->Connect(wxID_ANY, wxEVT_ENTER_WINDOW, wxMouseEventHandler(HeLnkText::OnMouseEvent), NULL, this);
m_text->Connect(wxID_ANY, wxEVT_LEAVE_WINDOW, wxMouseEventHandler(HeLnkText::OnMouseEvent), NULL, this);
}


class HeLnkText : public wxFrame
{
public:
HeLnkText( wxWindow* parent, const wxString& label, const wxPoint& pos = wxDefaultPosition, long style = 0, const wxString& name = "staticText");

wxStaticText *m_text ;

void OnMouseEvent( wxMouseEvent& event );
}

HeLnkText::HeLnkText( wxWindow* parent, const wxString& label, const wxPoint& pos, long style, const wxString& name):wxFrame( parent, label, pos, style, name ) //初始化父类member,如果不这样,就用下面注释部分
{
//wxFrame::Create( parent, label, pos, style, name );
wxSizer *sizer = new wxSizer(wxVERTICAL);
this->SetSizer(sizer); //这里只是建议你用Sizer,为了保持Layout不会乱;
m_text = new wxStaticText( this, wxID_ANY, label, wxDefaultPosition, wxDefaultSize, style, name ) ; //wxStatictext是frame里的元素,所以parent是this;
sizer->add( m_text, 1, wxGROW, 5 );

m_text->Connect(wxID_ANY, wxEVT_LEFT_DOWN, wxMouseEventHandler(HeLnkText::OnMouseEvent), NULL, this);
m_text->Connect(wxID_ANY, wxEVT_ENTER_WINDOW, wxMouseEventHandler(HeLnkText::OnMouseEvent), NULL, this);
m_text->Connect(wxID_ANY, wxEVT_LEAVE_WINDOW, wxMouseEventHandler(HeLnkText::OnMouseEvent), NULL, this);
}
work work!!!
sishui
Earned some good credits
Earned some good credits
Posts: 121
Joined: Mon Mar 10, 2008 6:13 am
Location: 中國

Post by sishui »

HeMason wrote:我改成這樣了!
錯誤訊息只剩:
'HeLnkText::{ctor}' : 建構函式不允許傳回型別

這是什麼意思?
---------------------------------------------------------

class HeLnkText : public wxStaticText
{
public:
HeLnkText( wxWindow* parent, const wxString& label,
const wxPoint& pos = wxDefaultPosition,
long style = 0, const wxString& name = "staticText") ;

wxStaticText *m_text ;

void OnMouseEvent( wxMouseEvent& event );
}

HeLnkText::HeLnkText( wxWindow* parent, const wxString& label,
const wxPoint& pos,
long style, const wxString& name)
{
m_text = new wxStaticText( parent, wxID_ANY, label, pos, wxDefaultSize, style, name) ;

m_text->Connect(wxID_ANY, wxEVT_LEFT_DOWN, wxMouseEventHandler(HeLnkText::OnMouseEvent), NULL, this);
m_text->Connect(wxID_ANY, wxEVT_ENTER_WINDOW, wxMouseEventHandler(HeLnkText::OnMouseEvent), NULL, this);
m_text->Connect(wxID_ANY, wxEVT_LEAVE_WINDOW, wxMouseEventHandler(HeLnkText::OnMouseEvent), NULL, this);
}
建议,你把C++看完(STL可以先不看),至少继承、多态这些要了解
推荐几本书,C++ PRIMER——C++入门非常好,Thanking in c++——(老鸟菜鸟都实用)老少皆宜,EFFECTIVE C++ 和 MORE EFFECTIVE C++,其他还有很多好的书,慢慢来,这些书网络有PDF/CHM版,你也可以去书店买
work work!!!
HeMason
Experienced Solver
Experienced Solver
Posts: 73
Joined: Tue Jun 30, 2009 10:07 am
Location: Taiwan
Contact:

深入瞭解一下

Post by HeMason »

sishui wrote: 建议,你把C++看完(STL可以先不看),至少继承、多态这些要了解
推荐几本书,C++ PRIMER——C++入门非常好,Thanking in c++——(老鸟菜鸟都实用)老少皆宜,EFFECTIVE C++ 和 MORE EFFECTIVE C++,其他还有很多好的书,慢慢来,这些书网络有PDF/CHM版,你也可以去书店买
這倒是中肯的建議。
小弟先前看過一些,但還真有點搞不太懂。

上面的寫法,小弟再請教一下:
1. 這是一個「有超連結的文字」,所以小弟以為他是繼承自 wxStaticText,這樣才會繼承 wxStaticText 的相關功能。不是嗎?
2. 因為一個 Panel中會有很多HeLnkText,使用 Sizer應該是在呼叫他的那一層來做,在產生HeLnkText時,只是單純的產生,並加上Connect。小弟是這麼想的。
3. 依照 VC 編譯的結果,好像指出 HeLnkText::HeLnkText 這行寫法有錯,有傳回值,但明明就沒有啊?

還望您指教,謝謝您!
「漢書文書處理系統」作者,在這向大家學習。
MyBlog 梅僧山房
sishui
Earned some good credits
Earned some good credits
Posts: 121
Joined: Mon Mar 10, 2008 6:13 am
Location: 中國

Re: 深入瞭解一下

Post by sishui »

HeMason wrote:
sishui wrote: 建议,你把C++看完(STL可以先不看),至少继承、多态这些要了解
推荐几本书,C++ PRIMER——C++入门非常好,Thanking in c++——(老鸟菜鸟都实用)老少皆宜,EFFECTIVE C++ 和 MORE EFFECTIVE C++,其他还有很多好的书,慢慢来,这些书网络有PDF/CHM版,你也可以去书店买
這倒是中肯的建議。
小弟先前看過一些,但還真有點搞不太懂。

上面的寫法,小弟再請教一下:
1. 這是一個「有超連結的文字」,所以小弟以為他是繼承自 wxStaticText,這樣才會繼承 wxStaticText 的相關功能。不是嗎?
2. 因為一個 Panel中會有很多HeLnkText,使用 Sizer應該是在呼叫他的那一層來做,在產生HeLnkText時,只是單純的產生,並加上Connect。小弟是這麼想的。
3. 依照 VC 編譯的結果,好像指出 HeLnkText::HeLnkText 這行寫法有錯,有傳回值,但明明就沒有啊?

還望您指教,謝謝您!
1、你的wxStaticText是纯在在window/panel/dlg等之内的,所以你必须有一个window,然后将wxStaticText存在于window之内。
2、如果你要继承wxStaticText,从而扩展他的功能,当然是可以。但你继承自wxStaticText的东西不能独立成窗口的。
3、编译器为什么这样报我也不是很清楚,也许是误报,也许不是。
work work!!!
HeMason
Experienced Solver
Experienced Solver
Posts: 73
Joined: Tue Jun 30, 2009 10:07 am
Location: Taiwan
Contact:

Post by HeMason »

找到問題了!
呵呵呵~不好意思!
真的是新手,請多包涵啦!
經過改正之後,這段程式碼是可以用的。
感謝指教了!

class HeLnkText : public wxStaticText
{
public:
HeLnkText( wxWindow* parent, const wxString& label,
const wxPoint& pos = wxDefaultPosition,
long style = 0, const wxString& name = "staticText") ;

wxStaticText *m_text ;

void OnMouseEvent( wxMouseEvent& event );
} ; <== 這裡欠一個分號,所以編譯程式就把下面的內容接上來了

HeLnkText::HeLnkText( wxWindow* parent, const wxString& label,
const wxPoint& pos,
long style, const wxString& name)
{
m_text = new wxStaticText( parent, wxID_ANY, label, pos, wxDefaultSize, style, name) ;

m_text->Connect(wxID_ANY, wxEVT_LEFT_DOWN, wxMouseEventHandler(HeLnkText::OnMouseEvent), NULL, this);
m_text->Connect(wxID_ANY, wxEVT_ENTER_WINDOW, wxMouseEventHandler(HeLnkText::OnMouseEvent), NULL, this);
m_text->Connect(wxID_ANY, wxEVT_LEAVE_WINDOW, wxMouseEventHandler(HeLnkText::OnMouseEvent), NULL, this);
}
「漢書文書處理系統」作者,在這向大家學習。
MyBlog 梅僧山房
Post Reply