// XToolBarCtrl.cpp : implementation file // #include "stdafx.h" #include "XToolBarCtrl.h" #include "resource.h" #include "GJKWorkspace.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // XToolBarCtrl XToolBarCtrl::XToolBarCtrl() { m_bIsGJK = FALSE; } XToolBarCtrl::~XToolBarCtrl() { } BEGIN_MESSAGE_MAP(XToolBarCtrl, CToolBarCtrl) //{{AFX_MSG_MAP(XToolBarCtrl) ON_WM_DESTROY() ON_CBN_SELCHANGE(ID_COMBOBOX, OnSelchangeCombo) //}}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 { CTemporaryResourceOverride 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); //add by cwk on 060926 if (m_bIsGJK && m_pGjk->GetOpenMode()!=1) { CRect rect; this->GetItemRect(0,rect); rect.right = rect.right + 46; rect.bottom = rect.bottom + 156; m_pComboxCtrl = new CComboBox(); m_pComboxCtrl->Create(CBS_DROPDOWNLIST|WS_VISIBLE|WS_TABSTOP|CBS_AUTOHSCROLL, rect,this,ID_COMBOBOX); m_pComboxCtrl->SetItemHeight(-1,20); m_pComboxCtrl->SetFont(pParent->GetFont()); } } void XToolBarCtrl::OnDestroy() { CToolBarCtrl::OnDestroy(); // TODO: Add your message handler code here if (m_bIsGJK && m_pGjk->GetOpenMode()!=1) { m_pComboxCtrl->DestroyWindow(); delete m_pComboxCtrl; } } extern BOOL GetGjkwFileByMenu(const TCHAR* szMenuName, CString &csTkwFileName); void XToolBarCtrl::OnSelchangeCombo() { if (m_bIsGJK) { CString str,sTKWFullName; if (m_pComboxCtrl != NULL) { m_pComboxCtrl->GetLBText(m_pComboxCtrl->GetCurSel(),str); GetGjkwFileByMenu(LPCTSTR(str), sTKWFullName); if(!sTKWFullName.IsEmpty() && FindFile(sTKWFullName)) { m_pGjk->m_csCurTKWFile = sTKWFullName; m_pGjk->m_treeCtrl.SetDataSource(sTKWFullName); m_pGjk->m_ImageBox.m_bIsJpgShow = m_pGjk->m_treeCtrl.m_bIsJpgShow; m_pGjk->m_treeCtrl.SelectItem(m_pGjk->m_treeCtrl.GetRootItem()); m_pGjk->SetDlgItemText(IDC_S_DESCRIPTION, _T("打开gjk图库组文件")); m_pGjk->SaveStatus(); m_pGjk->LoadStatus(); m_sCurSelect = str; } else if(!FindFile(sTKWFullName) && !sTKWFullName.IsEmpty()) { MessageBox(_T("没有找到库文件!请确认安装是否完全。")); m_pComboxCtrl->SetCurSel(m_pComboxCtrl->FindStringExact(-1,LPCTSTR(m_sCurSelect))); } } } }