2017-06-13 24 views
0

選択した項目には何の反応(簡体字):wxToolBar:コードを次のようにドロップダウンメニューを使用しています、私はwxToolBarを使用してい

g_toolBar1->AddTool(TOOLBAR_CMD_CONTROL_DROPDOWN,_("Control elements"),MainWin::getBitmap(gearsXPM,"gears"),wxNullBitmap,wxITEM_DROPDOWN); 
custParent->Connect(TOOLBAR_CMD_CONTROL_DROPDOWN,wxEVT_COMMAND_TOOL_CLICKED,wxCommandEventHandler(DrawCanvasSwitcher::OnToolbar),NULL,g_drawCanvas); 

wxMenu *controlMenu=new wxMenu; 

// following is repeated several times to have more than onw drop-down item 
// (*it) is an iterator to an container holding the required data 
wxMenuItem *item=new wxMenuItem(controlMenu,wxID_ANY,(*it)->m_entityParams.m_name,(*it)->m_entityParams.m_shorthelp); 
controlMenu->Append(item); 
item->SetBitmap(*(*it)->m_entityParams.m_bmToolbar); 
item->SetId((*it)->m_wxID); 
custParent->Connect(item->GetId(),wxEVT_COMMAND_TOOL_DROPDOWN_CLICKED,wxCommandEventHandler(DrawCanvasSwitcher::OnMenu),NULL,g_drawCanvas); 

g_toolBar1->SetDropdownMenu(TOOLBAR_CMD_CONTROL_DROPDOWN,controlMenu); 

g_toolBar1->Realize(); 

は、したがって、最初の接続は、()成功します一番上のツールバー項目をクリックすると、私はDrawCanvasSwitcher :: OnToolbar()で終わります。 2番目のConnect() - 同じファイル内の異なる位置からコピーされ、通常のメニュー項目で正常に動作する場所は機能しません。ツールバーのドロップダウンを選択すると、DrawCanvasSwitcher :: OnMenu()でイベントが発生することはありません項目。イベントタイプは、wxWidgets 3.1に付属のツールバーサンプルで使用されているものと同じです。 g_drawCancasとcustParentはすべて有効です(プレーンなメニュー項目でも機能します)。

クリックしたアイテムにイベントが表示されないのはなぜですか?

編集:まだ何の違い、いかなる場合をしない代わりにwxEVT_COMMAND_TOOL_DROPDOWN_CLICKEDのwxEVT_COMMAND_MENU_SELECTEDを使用して...私はいつものように、最善のことを行うには、コード内で明らかに間違った何かを見、そうではないん

答えて

1

だろうできるだけシンプルにしようとするか、ツールバーのサンプルで同じことを試して問題を再現できるかどうかを確認してください。

メニュー項目を作成するときにすぐに(*it)->m_wxIDを指定することをお勧めしますが、後で設定するのではありません。それはと書かれているはずですが、このようにするのはむしろ珍しいことです。おそらくどこかにバグがあります。ツールバーのサンプルで問題を再現するために管理しなければ

は(例えばそこMyFrame::OnToolDropdown()のためのイベントテーブルのエントリを削除し、代わりにConnect()を使用)、お使いのプラットフォームに言及、バグとしてreport itを行ってください。

そして、それはあなたの問題とは全く無関係だが、最終的には、wxWidgetsの3.xのでConnect()の代わりBind()を使用する一切の理由は本当にありません、あなたは本当に良くコンパイル時の安全性と柔軟性のために、後者に切り替える必要があります。

+0

SetId()を使ってIDを設定する理由がありました。メニュー項目を作成する際にIDを設定すると、スムーズに動作します - ありがとう! Connect()は、私がまだバージョン2.8になっているいくつかのプラットフォームでこのアプリケーションをコンパイルする必要があるため、使用されています... – Elmi

関連する問題