FC2ブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

CMFCToolBarにComboBoxを置く方法(続き2)

作成したCMFCToolBar上のComboBoxに現在の選択行を表示しようとして

iIndex = m_wndToolBar.CommandToIndex(ID_EDIT_FIND_COMBO, 0);
CMFCToolBarComboBoxButton* btn = (CMFCToolBarComboBoxButton*)m_wndToolBar.GetButton(iIndex);
btn->SelectItem(selectindex);
のようにしたのは、いいのですが、これが動作するComboBoxと動作しない(SelectItemに反応しない)ComboBoxがあってはまりました。

それで
CMFCToolBarComboBoxButton* btn = (CMFCToolBarComboBoxButton*)m_wndToolBar.GetButton(iIndex);
で取得されるbtnのデータ型をみるとCMFCToolBarComboBoxButtonではなくて、CMFCToolBarButtonになっているんですよね。
OnResetToolbarで最初に作ったときは、ちゃんとCMFCToolBarComboBoxButtonが取れていたので、どこかですりかわってしまったんだろうと思っていました。
MFCのソースを追っているとCMFCToolBarのm_Buttonsがいつのまにか増えていてこれが悪さしているのだろうと思ってどこで増えているのは調べようとしたのですがわかりませんでした。。。
ただどうもMAINFRAMEのCMFCToolbarはMFCが勝手に増やしていてそれはあまり問題になってないような感じです。
カスタマイズのツールバーのリセットを行った直後だけ、ちゃんとComboBoxが動作するのですが、それもさらに謎です。

それでいろいろしらべてみてやっと原因がわかりました。
最初にOnResetToolBarで
CMFCToolBarComboBoxButtonbtnCombo(ID_EDIT_FIND_COMBO, GetCmdMgr()->GetCmdImage(ID_EDIT_FIND), CBS_DROPDOWNLIST | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL);
m_wndToolBar.ReplaceButton(ID_EDIT_FIND, btnCombo);
のようにしてComboBoxを作成するのですが、
このときの、ID_EDIT_FIND_COMBOとID_EDIT_FINDのIDの値が違っていないとこのようなことが起こるみたいです。
これを実行した直後は)m_wndToolBar.GetButton(iIndex)も正しい結果が得られていたのですが、MFCが勝手にボタンを追加していくうちに追加前のID_EDIT_FINDのIDの空のボタンの場所がなぜか復活しててそれが返ってくるようでした。
なんかトラぶったときに非常にわかりにくいですね。。
先が思いやられます。。


スポンサーサイト

コメントの投稿

非公開コメント

プロフィール

chattera.net

Author:chattera.net
フリーでソフト開発の仕事をしています。
自作したこのチャットシステムは、何か世の中に役に立つこともあるかと思いますので、お呼びがかかるとうれしいですね。

連絡先は chatteranet@gmail.com です。

また、ソフト開発関連のお誘いもうけたまわっております。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。