如何在Windows下的Notebook控件中获取用户的新页面选择?
How to get the user's new page selection in a Notebook control under Windows?
在我的应用程序中,当用户对笔记本控件的某一页上的数据进行更改时,我想在他们切换到另一页时提示他们保存或放弃更改。我为此绑定了 EVT_BOOKCTRL_PAGE_CHANGING
事件,并创建了一个处理程序方法。
但是,我无法判断用户正在切换到哪个页面。根据the wxBookCtrlEvent docs,
under Windows, GetSelection() will return the same value as GetOldSelection() when called from the EVT_BOOKCTRL_PAGE_CHANGING
handler and not the page which is going to be selected.
有解决办法吗?
我想作为一种解决方法,您可以使用鼠标处理程序来检查何时单击了左键。在该事件的处理程序中,您可以进行点击测试以查看点击的位置并存储被点击的选项卡的值。像这样:
void MyFrame::OnLeftDown( wxMouseEvent& event )
{
long flags;
int ht = m_notebook1->HitTest( wxPoint(event.GetX(),event.GetY()), &flags);
if( (flags & wxBK_HITTEST_NOWHERE) == 0 )
{
//store the value of ht somewhere
}
event.Skip();
}
void MyFrame::OnNotebookPageChanging( wxNotebookEvent& event )
{
//use the stored value of ht here
}
under Windows, GetSelection() will return the same value as
GetOldSelection() when called from the EVT_BOOKCTRL_PAGE_CHANGING
handler and not the page which is going to be selected.
因此,从 EVT_BOOKCTRL_PAGE_CHANGED 调用 GetSelection 以获取新页面。
不,没有解决方法(如果有可靠的方法,wxWidgets 早就在做),底层的本机控件根本不提供此信息。
您可以在任何情况下询问您需要向用户询问的任何问题,与他们切换到的页面无关,或者在他们已经切换后询问他们——当然,这将是如果您随后决定切换回来,看起来会很奇怪。
如果您真的非常需要这个功能,您可以使用非本地 wxAuiNotebook
。
在我的应用程序中,当用户对笔记本控件的某一页上的数据进行更改时,我想在他们切换到另一页时提示他们保存或放弃更改。我为此绑定了 EVT_BOOKCTRL_PAGE_CHANGING
事件,并创建了一个处理程序方法。
但是,我无法判断用户正在切换到哪个页面。根据the wxBookCtrlEvent docs,
under Windows, GetSelection() will return the same value as GetOldSelection() when called from the
EVT_BOOKCTRL_PAGE_CHANGING
handler and not the page which is going to be selected.
有解决办法吗?
我想作为一种解决方法,您可以使用鼠标处理程序来检查何时单击了左键。在该事件的处理程序中,您可以进行点击测试以查看点击的位置并存储被点击的选项卡的值。像这样:
void MyFrame::OnLeftDown( wxMouseEvent& event )
{
long flags;
int ht = m_notebook1->HitTest( wxPoint(event.GetX(),event.GetY()), &flags);
if( (flags & wxBK_HITTEST_NOWHERE) == 0 )
{
//store the value of ht somewhere
}
event.Skip();
}
void MyFrame::OnNotebookPageChanging( wxNotebookEvent& event )
{
//use the stored value of ht here
}
under Windows, GetSelection() will return the same value as GetOldSelection() when called from the EVT_BOOKCTRL_PAGE_CHANGING handler and not the page which is going to be selected.
因此,从 EVT_BOOKCTRL_PAGE_CHANGED 调用 GetSelection 以获取新页面。
不,没有解决方法(如果有可靠的方法,wxWidgets 早就在做),底层的本机控件根本不提供此信息。
您可以在任何情况下询问您需要向用户询问的任何问题,与他们切换到的页面无关,或者在他们已经切换后询问他们——当然,这将是如果您随后决定切换回来,看起来会很奇怪。
如果您真的非常需要这个功能,您可以使用非本地 wxAuiNotebook
。