お世話になっています。
VC++.NET2002 にてMFCでアプリケーションを作成しています。
ツールバーに画像、テキストを設定してボタンを作っているのですが、
状況によりテキストがかなり長くなります。
テキスト最大長に合わせると画面に収まらなくなってしまうため、
ボタンのサイズを64*64に固定したいのですが、
度々テキスト長にあわされてしまいます。
以下ソース抜粋
CToolBar m_wndToolBar;
CImageList m_ToolImageList;
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_TOOLTIPS ) || !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
return false;
int id = m_wndToolBar.CommandToIndex(ID_MENU1);
//CImageListの構築×10
//m_wndToolBar.SetButtonTextでテキスト追加×10
m_wndToolBar.GetToolBarCtrl().SetImageList(&m_ToolImageList);
m_wndToolBar.SetSizes(CSize(64, 64), CSize(48, 48));
SetButtonStyle()で TBBS_AUTOSIZE フラグを明示的に下げてもダメ、
テキストの内容や関数をコールする順番を変更してみると、稀にOKなのがわかりません。
確実にサイズを設定する方法をご存知の方がおりましたら、よろしくお願いします。
CRect rectTemp;
m_wndToolBar.GetItemRect(0,&rectTemp);
m_wndToolBar.SetSizes(CSize(rectTemp.Width(), rectTemp.Height()),CSize(48,48));
ではいかがですか?
回答ありがとうございます。
が、全く変化ありません。
表示するテキストにより64*64になったり?*64になったりするのですが、
現在の環境だと rectTemp.Width() = 123 rectTemp.Height() = 67 になっており、
>m_wndToolBar.SetSizes(CSize(64, 64), CSize(48, 48));
この行を
>m_wndToolBar.SetSizes(CSize(123, 67), CSize(48, 48));
に変更した結果と変わりないようですが。。。
一応報告です。
OnNotify() 内で毎回 SetSizes() をコールしてみたところ、固定してくれました。
恐らくは OnCreate後にTBSTYLE_AUTOSIZEが適用されているのが原因だと思います。
完全解決ではないので、引き続き回答募集いたします。
よろしくお願いします。
VC++6.0でMFCアプリを新規作成(設定はSDIにした以外変更なし)
もとからある m_wndToolBar::CreateEx, LoadToolBar をやめて、
以下のようにすると、とりあえず、固定サイズのツールバーになりました。
参考になるか分かりませんが、試してみてください。
m_wndToolBar.CreateEx(this);
CToolBarCtrl *pCtrl = &m_wndToolBar.GetToolBarCtrl();
pCtrl->LoadImages(IDB_STD_SMALL_COLOR, HINST_COMMCTRL);
TBBUTTON tb;
memset(&tb, '\0', sizeof(tb));
tb.iBitmap = STD_FILENEW;
tb.fsState = TBSTATE_ENABLED;
tb.fsStyle = TBSTYLE_BUTTON;
for (int i=0; i<4; i++) {
pCtrl->AddButtons(1, &tb);
m_wndToolBar.SetButtonText(i, _T("aaaaaaaaaaaaaaaaaaaaaa"));
}
m_wndToolBar.SetSizes(CSize(64,64), CSize(16,15));
>774さま
回答ありがとうございます。
参考にちょっといじってみたところ、画面が大変な事になってしまったので慌てて戻しました^^;
時間が出来たらじっくり直してみたいと思います。
確認するのが先になってしまいそうなので、一応質問を〆ておきます。
どうもありがとうございました〜
ツイート | ![]() |