在ToolBar中加其他控件

在ToolBar中加其他控件

最近有网友提到这个问题,本来可以用dialogbar来解决,后来想了想如果一定要用ToolBar怎么办呢?所以就试了试。

1》。在要加其他控件的CToolBar上加一个按钮,(资源编辑中),起名ID_COMBO_IN_TOOLBAR。

2》。在dialog头文件中加一个CComboBox m_DlgCombo;//该控件的响应要自己写,MFC帮不上忙。

2》。在OnInitDialog()中增加:

#define CTRL_WIDTH  76 //所加combobox的宽度。
BOOL CDlgHasToolBarDlg::OnInitDialog()
{

。。。

//为dialog添加ToolBar:

// TODO: Add extra initialization here
// | CBRS_GRIPPER | CBRS_FLYBY | CBRS_SIZE_FIXED
 if (!m_wndToolBar.CreateEx(this,TBSTYLE_FLAT,WS_CHILD|WS_VISIBLE|CBRS_TOP|CBRS_TOOLTIPS) ||
  !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
 {
  AfxMessageBox("Failed to create toolbar/n");
  return -1; // fail to create
 }

// 找到那个按钮PlaceHolder,即ID_COMBO_IN_TOOLBAR。
 int idx=0;
 while(m_wndToolBar.GetItemID(idx) != ID_COMBO_IN_TOOLBAR) idx++;
// 把该按钮改为指定宽度的分隔符 
 m_wndToolBar.SetButtonInfo(idx,ID_COMBO_IN_TOOLBAR,TBBS_SEPARATOR,CTRL_WIDTH);
// 设置ComboBox尺寸
 CRect rc;
 m_wndToolBar.GetItemRect(idx,&rc);
 rc.bottom += 200;//设置下拉表高度
// 事件响应应该这样写: ON_CBN_EDITCHANGE(ID_COMBO_IN_TOOLBAR, OnEditchangeCombo)
//在ToolBar中产生我们要的CComboBox

 m_DlgCombo1.Create(WS_CHILD|WS_VISIBLE|CBS_AUTOHSCROLL|CBS_DROPDOWN|CBS_HASSTRINGS,
      rc,&m_wndToolBar,
      ID_COMBO_IN_TOOLBAR);// !!!!!
// 填充下拉表
 m_DlgCombo1.ShowWindow(SW_SHOW);
 m_DlgCombo1.AddString("xxxx");
 m_DlgCombo1.AddString("yyyy");
 m_DlgCombo1.AddString("zzzz");
 m_DlgCombo1.SetCurSel(0);//E800->E8FF // reposQuery, rcClientNow);
 RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);

。。。

}

//通过以上的办法就可以为CDialog中的CToolBar增加其他的控件如CStatic。。。

 

另外提一下CBoolBar的ToolTip问题。要注意的是CBoolBar响应OnToolTipNotify()时给出的按钮的ID号,不是窗口Handle:

BOOL CDlgHasToolBar::OnToolTipNotify( UINT id, NMHDR * pNMHDR, LRESULT * pResult )
{
 TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR;
 UINT nID =pNMHDR->idFrom;
 char txt[256];
 if (pNMHDR->code==TTN_NEEDTEXT)
 {
  if(pTTT->uFlags & TTF_IDISHWND)
  {// idFrom is actually the HWND of the tool
   nID = ::GetDlgCtrlID((HWND)nID);//dlg上其他控件
  }
  if(nID)
  {//ToolBar在这里响应
   sprintf(txt,"%d",nID);
   pTTT->lpszText = txt;
   return(TRUE);
  }
   }
    return(FALSE);
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值