0

このコードの周りにいくつかのクラスがあります。それを ToolbarButton と呼びましょう

TBBUTTON tbbutton;
ZeroMemory(&tbbutton, sizeof(tbbutton));  
tbbutton.idCommand = index;
tbbutton.dwData = 0;
tbbutton.fsState = TBSTATE_ENABLED | BSTYLE_BUTTON | BTNS_SHOWTEXT;
tbbutton.iBitmap = I_IMAGENONE;
tbbutton.iString = toolbar->AddStrings(text);

toolbar->InsertButton(index, &tbbutton);

ツールバーは何かCToolBarCtrl *です

ToolbarButton クラスのメッセージ ループを作成するにはどうすればよいですか?

何かのようなもの

class ToolbarButton : public CMessageMap{
  ..
  BEGIN_MSG_MAP(ToolbarButton )
    MESSAGE_HANDLER(WM_COMMAND, OnClick)
  END_MSG_MAP()

  ..
}

OnClick が呼び出されませんでした。他に何をすればよいですか?

更新: 回答からのバリアントについても考えています。ツールバーはクリック メッセージを処理し、idCommand でボタンを検索し、見つかったボタンの OnClick を呼び出します。..しかし、私はリファクタリングしているコードを持っており、ボタンクラス(正確には〜ボタンの周りに約4つのインターフェースと15のクラス)があり、必要なものをそのような構文糖衣で実行しますが、古いコードと必要なコードも含まれています排除するために、現在私はそれをスライスすることはできません

4

1 に答える 1

1

多少異なる方法で動作するはずです。

  • メッセージマップクラスから継承しません。通常、ウィンドウ化されたクラスにはメッセージマップがあります
  • ツールバー ボタンはウィンドウではありません。ツールバーはウィンドウ化されたコントロールであり、ボタンは個別のハンドルやメッセージ マップのない内部部分です。特定のボタン識別子を持つツールバーからの通知としてボタンのクリックを処理します
  • カスタム ボタンをツールバーに配置する場合は、(a) オーナー描画などのカスタマイズされたボタンで、ツールバー コントロール自体でサポートされる範囲まで、または (b) フル機能のウィンドウ コントロールのいずれかである必要があります。

オプションが実際に何であるかについては、Using Toolbar Controlsを確認することをお勧めします。

于 2011-10-10T18:46:22.980 に答える