抓不到改變Panel大小的Event?

这是wxWidgets论坛的中文版本。在这里,您可以用您的母语汉语讨论上面任一子论坛所涉及的所有关于wxWidgets的话题。欢迎大家参与到对有价值的帖子的中英互译工作中来!
HeMason
Experienced Solver
Experienced Solver
Posts: 73
Joined: Tue Jun 30, 2009 10:07 am
Location: Taiwan
Contact:

抓不到改變Panel大小的Event?

Post by HeMason »

小弟在利用原有的sample程式做了一點改變,有點小進展,但遇到了個問題。
附檔是執行畫面。

原想在右側的Panel第一行加上四樣東西:
<- -> 文字 按鈕
按鈕我希望放在最右邊。
但是,用盡各種方法,就是不行?

後來就想用直接給位置畫上去算了。
所以就想由「拉動分隔線時」的Event去取得Panel大小,重算按鈕位置。
但是小弟用了:
EVT_SPLITTER_SASH_POS_CHANGED( wxID_ANY, HeFuncPane::OnSplitter)
去攔截此動作,竟然無效!
後來又改用:
EVT_SIZE( HeFuncPane::OnSize)
也無效!

因為主程式是用 wxAuiManager 安排各個 Panel 的 layout。
這一段是這樣放上去的:
m_mgr.AddPane( FuncPane->GetPanel(), wxAuiPaneInfo().
Name(wxT("Function")).CaptionVisible(false).
Right().Position(0).MinSize(250, 250)) ;

難道,跟這有關嗎?
小弟想破頭,沒解決。
所以只好再來向前輩們請教了!
感謝喔!
Attachments
執行畫面
執行畫面
「漢書文書處理系統」作者,在這向大家學習。
MyBlog 梅僧山房
samsam598
Super wx Problem Solver
Super wx Problem Solver
Posts: 340
Joined: Mon Oct 06, 2008 12:55 pm

Re: 抓不到改變Panel大小的Event?

Post by samsam598 »

HeMason wrote:小弟在利用原有的sample程式做了一點改變,有點小進展,但遇到了個問題。
附檔是執行畫面。

原想在右側的Panel第一行加上四樣東西:
<- -> 文字 按鈕
按鈕我希望放在最右邊。
但是,用盡各種方法,就是不行?
感謝喔!
用wxSizer不管用吗?这里有个wxSizer的教程:
http://neume.sourceforge.net/sizerdemo/
http://zetcode.com/tutorials/wxwidgetst ... anagement/

不知有没有帮助
HeMason
Experienced Solver
Experienced Solver
Posts: 73
Joined: Tue Jun 30, 2009 10:07 am
Location: Taiwan
Contact:

Re: 抓不到改變Panel大小的Event?

Post by HeMason »

samsam598 wrote: 用wxSizer不管用吗?这里有个wxSizer的教程:
http://neume.sourceforge.net/sizerdemo/
http://zetcode.com/tutorials/wxwidgetst ... anagement/

不知有没有帮助
真感謝您給小弟的網址,這兩個網站小弟都沒有看過,很有參考價值。

不過,先前小弟就已經試過各種 sizer了,都沒成功!
因為小弟想做的效果是:
***************************
*<- -> 文字標題        按鈕*
***************************

也就是說,在一列中只有一個按鈕是靠右,其他都靠左。
還要能隨Panel大小自動調整。
查了一下說明,發現 wxBoxSizer 中,設定 HORIZONTAL 時,是不能設定 RIGHT、LEFT、CENTER 的,這參數只能用在 VERTIACAL 狀態。
需要空出一些空間時,都是要用 AddSpace。
所以,改來改去都改不出來,放棄了!
才想自己給位置,並且在Panel改變大小時,攔截處理。
「漢書文書處理系統」作者,在這向大家學習。
MyBlog 梅僧山房
samsam598
Super wx Problem Solver
Super wx Problem Solver
Posts: 340
Joined: Mon Oct 06, 2008 12:55 pm

Re: 抓不到改變Panel大小的Event?

Post by samsam598 »

HeMason wrote:小弟在利用原有的sample程式做了一點改變,有點小進展,但遇到了個問題。
附檔是執行畫面。

原想在右側的Panel第一行加上四樣東西:
<- -> 文字 按鈕
按鈕我希望放在最右邊。
但是,用盡各種方法,就是不行?
感謝喔!
用wxSizer不管用吗?这里有个wxSizer的教程:
http://neume.sourceforge.net/sizerdemo/
http://zetcode.com/tutorials/wxwidgetst ... anagement/

不知有没有帮助
samsam598
Super wx Problem Solver
Super wx Problem Solver
Posts: 340
Joined: Mon Oct 06, 2008 12:55 pm

Re: 抓不到改變Panel大小的Event?

Post by samsam598 »

不過,先前小弟就已經試過各種 sizer了,都沒成功!
因為小弟想做的效果是:
***************************
*<- -> 文字標題        按鈕*
***************************

也就是說,在一列中只有一個按鈕是靠右,其他都靠左。
還要能隨Panel大小自動調整。
查了一下說明,發現 wxBoxSizer 中,設定 HORIZONTAL 時,是不能設定 RIGHT、LEFT、CENTER 的,這參數只能用在 VERTIACAL 狀態。
需要空出一些空間時,都是要用 AddSpace。
所以,改來改去都改不出來,放棄了!
才想自己給位置,並且在Panel改變大小時,攔截處理。[/quote]

我也明白前辈之前已研究过SIZER了,想必前辈已试过嵌套SIZER及设置PROPORTION属性了吧
Attachments
wxSizer.JPG
sishui
Earned some good credits
Earned some good credits
Posts: 121
Joined: Mon Mar 10, 2008 6:13 am
Location: 中國

Post by sishui »

前輩,你既然用wxAuiManager,那麼就沒必要去計算Panel的大小了
看你說的,我理解有2種意思
1、"隱藏"Button永遠靠右
2、點擊"隱藏"Button右邊的pannel隱藏?

解決問題1:
將你的此Panel內的Sizer應該為wxHORIZONTAL。
<-□->□StaticText□Button;
□一个Spacer,如:BoxSizer->Add(5, 5, 1, wxGROW|wxALL, 5); 这样就有一个Spacer了。

解决问题2:
m_mgr.GetPane( mPanel ).Hide();
m_mgr.Update();
你中間的Panel會自動Expand
work work!!!
HeMason
Experienced Solver
Experienced Solver
Posts: 73
Joined: Tue Jun 30, 2009 10:07 am
Location: Taiwan
Contact:

Re: 抓不到改變Panel大小的Event?

Post by HeMason »

samsam598 wrote: 我也明白前辈之前已研究过SIZER了,想必前辈已试过嵌套SIZER及设置PROPORTION属性了吧
小弟有下載PDF檔,有印出來看。
您提供的這段小弟有看過,感謝!
但...還是沒搞頭!
真頭痛!
是我的要求太高了嗎?應該不會啊!
這樣的界面不是很平常嗎?
「漢書文書處理系統」作者,在這向大家學習。
MyBlog 梅僧山房
sishui
Earned some good credits
Earned some good credits
Posts: 121
Joined: Mon Mar 10, 2008 6:13 am
Location: 中國

Re: 抓不到改變Panel大小的Event?

Post by sishui »

HeMason wrote:
samsam598 wrote: 我也明白前辈之前已研究过SIZER了,想必前辈已试过嵌套SIZER及设置PROPORTION属性了吧
小弟有下載PDF檔,有印出來看。
您提供的這段小弟有看過,感謝!
但...還是沒搞頭!
真頭痛!
是我的要求太高了嗎?應該不會啊!
這樣的界面不是很平常嗎?
你要求的介面的確很平常,估計也只有wx有Sizer這種東西,不過這是一種非常神奇的,用熟悉了,你會覺得他很棒,如果還不是很熟悉,會覺得真頭痛。
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:前輩,你既然用wxAuiManager,那麼就沒必要去計算Panel的大小了
看你說的,我理解有2種意思
1、"隱藏"Button永遠靠右
2、點擊"隱藏"Button右邊的pannel隱藏?

解決問題1:
將你的此Panel內的Sizer應該為wxHORIZONTAL。
<-□->□StaticText□Button;
□一个Spacer,如:BoxSizer->Add(5, 5, 1, wxGROW|wxALL, 5); 这样就有一个Spacer了。
是的!您一眼就看出小弟的需求!
搞定了!
原來這麼簡單!
看來,wxWidgets還是有兩把刷子,真的有考慮到一些特殊需求。

感激啊!
「漢書文書處理系統」作者,在這向大家學習。
MyBlog 梅僧山房
HeMason
Experienced Solver
Experienced Solver
Posts: 73
Joined: Tue Jun 30, 2009 10:07 am
Location: Taiwan
Contact:

關於抓OnSize 等的Event又是怎麼回事?

Post by HeMason »

雖然問題解決了,但小弟還是有點納悶,為什麼會抓不到 Panel分隔線拉動的Event呢?
小弟一定是哪裡還沒搞懂!
「漢書文書處理系統」作者,在這向大家學習。
MyBlog 梅僧山房
sishui
Earned some good credits
Earned some good credits
Posts: 121
Joined: Mon Mar 10, 2008 6:13 am
Location: 中國

Re: 關於抓OnSize 等的Event又是怎麼回事?

Post by sishui »

HeMason wrote:雖然問題解決了,但小弟還是有點納悶,為什麼會抓不到 Panel分隔線拉動的Event呢?
小弟一定是哪裡還沒搞懂!
mPanel->Connect(ID_PANEL, wxEVT_SIZE, wxSizeEventHandler(YourFrm::OnSize), NULL, this);
OnSize( wxSizeEvent& event )
{
wxMessageBox("改變mPanelSize");
}
你用的EVT_SIZE()是YourFrm的Size改變,而不是mPanel的
work work!!!
HeMason
Experienced Solver
Experienced Solver
Posts: 73
Joined: Tue Jun 30, 2009 10:07 am
Location: Taiwan
Contact:

Re: 關於抓OnSize 等的Event又是怎麼回事?

Post by HeMason »

sishui wrote: 你用的EVT_SIZE()是YourFrm的Size改變,而不是mPanel的
搞定了!
原來還有這分別!
好像用 Connect 來設定比較靈活。

但是衍生出另一個問題:
是有進入到 OnSize(),但是原來那一列透過 wxBoxSizer 規劃的內容,全部都糊在一起了!?
是否要在 OnSize中加進什麼動作才會正常?
「漢書文書處理系統」作者,在這向大家學習。
MyBlog 梅僧山房
sishui
Earned some good credits
Earned some good credits
Posts: 121
Joined: Mon Mar 10, 2008 6:13 am
Location: 中國

Re: 關於抓OnSize 等的Event又是怎麼回事?

Post by sishui »

HeMason wrote:
sishui wrote: 你用的EVT_SIZE()是YourFrm的Size改變,而不是mPanel的
搞定了!
原來還有這分別!
好像用 Connect 來設定比較靈活。

但是衍生出另一個問題:
是有進入到 OnSize(),但是原來那一列透過 wxBoxSizer 規劃的內容,全部都糊在一起了!?
是否要在 OnSize中加進什麼動作才會正常?
OnSize是指你mPanel的改變所以用mPanel區Connect,你說全糊在一起了,是什麽意思?有圖否?
work work!!!
HeMason
Experienced Solver
Experienced Solver
Posts: 73
Joined: Tue Jun 30, 2009 10:07 am
Location: Taiwan
Contact:

Re: 關於抓OnSize 等的Event又是怎麼回事?

Post by HeMason »

sishui wrote: OnSize是指你mPanel的改變所以用mPanel區Connect,你說全糊在一起了,是什麽意思?有圖否?
圖如下。
紅框內的內容,糊在一起了!
Attachments
紅框內的內容,糊在一起了!
紅框內的內容,糊在一起了!
「漢書文書處理系統」作者,在這向大家學習。
MyBlog 梅僧山房
sishui
Earned some good credits
Earned some good credits
Posts: 121
Joined: Mon Mar 10, 2008 6:13 am
Location: 中國

Re: 關於抓OnSize 等的Event又是怎麼回事?

Post by sishui »

HeMason wrote:
sishui wrote: OnSize是指你mPanel的改變所以用mPanel區Connect,你說全糊在一起了,是什麽意思?有圖否?
圖如下。
紅框內的內容,糊在一起了!

按道理是不會這樣的,我才測試了 不會,你是用RAD工具生成的GUI還是手動寫的?
如果是RAD工具生成,你發張佈局圖,如果是自己寫的,請把那幾行代碼貼下
work work!!!
Post Reply