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 を作成し、check-status を「true」に設定します。そして、メニューに追加します。そして奇妙なことが起こり、check-status が「false」に変更されます。どうしてか言ってくれない?

ちなみに、これはこの質問に対する私のテストコードです。

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には、 「項目が既にメニューに追加されている場合にのみ機能する」と示されています。

内部的に (WindowsIsCheckedの場合)、メニューに追加されているかどうかを確認します。そうであれば、そこCheckedから状態を取得します。それ以外の場合は、それ自体に格納されているフラグの値を返します。そのため、アイテムを使用すると結果が変わりAppendます。

Checkと行を交換するAppendことは、簡単な回避策です。

于 2013-03-03T15:06:29.290 に答える