0

我是 wxWidgets 的新手。我的 wxWidgets 版本:wxWidgets-2.8.12,代码块:12.11,在 minGW 中。

我的代码是:

item=new wxMenuItem(settings,id,wxT("showTip"),wxT(""),wxITEM_CHECK );
item->Check(true);
settings->Append(item);/* after Append to 'settings', item->IsChecked()==false. */

首先,我创建一个 menuItem 并将检查状态设置为“true”。然后添加到菜单中。奇怪的事情发生了,检查状态变为“假”。请告诉我为什么?

顺便说一句,这是我对这个问题的测试代码。

wxMenu *settings=new wxMenu;
wxMenuItem *item=new wxMenuItem(settings,menuID_MENU,wxT("test menu"),wxT("help message"),wxITEM_CHECK);
item->Check(true);
bool check_status=item->IsChecked();
settings->Append(item);
bool check_status_after=item->IsChecked();

if(check_status!=check_status_after)
    wxLogMessage(wxT("not equal"));
4

1 回答 1

0

我无法真正说出为什么以这种方式实现它,但文档表明Check“仅当该项目已附加到菜单时才有效”。

在内部(在 Windows 上),IsChecked将检查它是否附加到菜单;如果是这样,它Checked会从中获取状态,否则它将返回它自己存储的标志的值。这就是为什么当您Append使用该项目时结果会发生变化。

交换CheckAppend线应该是一个简单的解决方法。

于 2013-03-03T15:06:29.290 回答