// XToolBarCtrl.cpp : implementation file // #include "stdafx.h" #include "XToolBarCtrl.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // XToolBarCtrl XToolBarCtrl::XToolBarCtrl() { } XToolBarCtrl::~XToolBarCtrl() { } BEGIN_MESSAGE_MAP(XToolBarCtrl, CToolBarCtrl) //{{AFX_MSG_MAP(XToolBarCtrl) // NOTE - the ClassWizard will add and remove mapping macros here. //}}AFX_MSG_MAP ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0, 0xFFFF, OnToolTipText) ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA, 0, 0xFFFF, OnToolTipText) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // XToolBarCtrl message handlers BOOL XToolBarCtrl::OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult) { ASSERT(pNMHDR->code == TTN_NEEDTEXTA || pNMHDR->code == TTN_NEEDTEXTW); if (GetRoutingFrame() != NULL) return FALSE; TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR; TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR; CString strTipText; UINT nID = pNMHDR->idFrom; if (pNMHDR->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND) || pNMHDR->code == TTN_NEEDTEXTW && (pTTTW->uFlags & TTF_IDISHWND)) { return FALSE; // shen rui add 对话框控件不显示 } if (nID != 0) // will be zero on a separator { CAcModuleResourceOverride vTmp; strTipText.LoadString(nID); //=szFullText; #ifndef _UNICODE if (pNMHDR->code == TTN_NEEDTEXTA) { lstrcpyn(pTTTA->szText, strTipText, sizeof(pTTTA->szText)); } else { _mbstowcsz(pTTTW->szText, strTipText, sizeof(pTTTW->szText)); } #else if (pNMHDR->code == TTN_NEEDTEXTA) { _wcstombsz(pTTTA->szText, strTipText,sizeof(pTTTA->szText)); } else { lstrcpyn(pTTTW->szText, strTipText, sizeof(pTTTW->szText)); *pResult = 0; } #endif ::SetWindowPos(pNMHDR->hwndFrom, HWND_TOP, 0, 0, 0, 0,SWP_NOACTIVATE| SWP_NOSIZE|SWP_NOMOVE|SWP_NOOWNERZORDER); return TRUE; } return TRUE; } void XToolBarCtrl::SetStyle(int ButtonID, BYTE style) { BOOL bErr; if(style == TBSTYLE_DROPDOWN) SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS); TBBUTTONINFO butInfo; butInfo.cbSize = sizeof(TBBUTTONINFO); butInfo.dwMask = TBIF_STYLE; bErr = GetButtonInfo(ButtonID, &butInfo); butInfo.fsStyle|= style; bErr = SetButtonInfo(ButtonID, &butInfo); } void XToolBarCtrl::InitToolBar(int ButtonID[], int len, int ResID, CWnd* pParent) { // CTemporaryResourceOverride vTmp; Create( WS_VISIBLE | WS_CHILD | CCS_TOP | TBSTYLE_TOOLTIPS | CCS_ADJUSTABLE ,CRect(0,0,0,0), pParent, ResID); TBBUTTON *pIndex, *pRTF_Button = new TBBUTTON[len]; pIndex = pRTF_Button; int numSep = 0; for(long lIndex = 0; lIndex < len; lIndex++) { memset(pIndex, NULL, sizeof(TBBUTTON)); pIndex->idCommand = ButtonID[lIndex]; if(ButtonID[lIndex] == 0) { pIndex->fsStyle = TBSTYLE_SEP; //分隔符 pIndex->iBitmap = 0; numSep++; } else { pIndex->fsStyle = TBSTYLE_BUTTON; pIndex->iBitmap = lIndex - numSep; //减去分隔符数目 } pIndex->fsState = TBSTATE_ENABLED; pIndex++; } CSize size(16, 16); SetButtonSize(size); AddButtons(len, pRTF_Button); delete[] pRTF_Button; SetBitmapSize(size); ModifyStyle(0, TBSTYLE_FLAT); AddBitmap(len - numSep, ResID); }