MFCでツールバーのボタンの幅を固定したい

解決


うま  2005-03-23 06:25:40  No: 56736

お世話になっています。

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なのがわかりません。

確実にサイズを設定する方法をご存知の方がおりましたら、よろしくお願いします。


Disca  URL  2005-03-24 11:15:52  No: 56737

CRect rectTemp;
m_wndToolBar.GetItemRect(0,&rectTemp);
m_wndToolBar.SetSizes(CSize(rectTemp.Width(), rectTemp.Height()),CSize(48,48));

ではいかがですか?


うま  2005-03-24 19:05:09  No: 56738

回答ありがとうございます。
が、全く変化ありません。

表示するテキストにより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));
に変更した結果と変わりないようですが。。。


うま  2005-03-24 22:31:06  No: 56739

一応報告です。
OnNotify() 内で毎回 SetSizes() をコールしてみたところ、固定してくれました。
恐らくは OnCreate後にTBSTYLE_AUTOSIZEが適用されているのが原因だと思います。

完全解決ではないので、引き続き回答募集いたします。
よろしくお願いします。


774  2005-03-24 23:26:33  No: 56740

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));


うま  2005-03-25 01:49:21  No: 56741

>774さま
回答ありがとうございます。
参考にちょっといじってみたところ、画面が大変な事になってしまったので慌てて戻しました^^;
時間が出来たらじっくり直してみたいと思います。


うま  2005-03-25 20:57:10  No: 56742

確認するのが先になってしまいそうなので、一応質問を〆ておきます。
どうもありがとうございました〜


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加