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

發佈了32 篇原創文章 · 獲贊 10 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章