UIDATA.CPP
上传用户:yatsl7111
上传日期:2007-01-08
资源大小:1433k
文件大小:5k
- //*******************************************************************************
- // COPYRIGHT NOTES
- // ---------------
- // You may use this source code, compile or redistribute it as part of your application
- // for free. You cannot redistribute it as a part of a software development
- // library without the agreement of the author. If the sources are
- // distributed along with the application, you should leave the original
- // copyright notes in the source code without any changes.
- // This code can be used WITHOUT ANY WARRANTIES at your own risk.
- //
- // For the latest updates to this code, check this site:
- // http://www.masmex.com
- // after Sept 2000
- //
- // Copyright(C) 2000 Philip Oldaker <email: philip@masmex.com>
- //*******************************************************************************
- /**********************************************************/
- /* implementation of class CUIListCtrlData */
- /* */
- /**********************************************************/
- #include "stdafx.h"
- #include "UIData.h"
- #ifdef _DEBUG
- #undef THIS_FILE
- static char BASED_CODE THIS_FILE[] = __FILE__;
- #endif
- /////////////////////////////////////////////////////////////////////////////
- // CIconObj
- IMPLEMENT_DYNAMIC(CUIODColumnCtrl, CObject)
- IMPLEMENT_DYNAMIC(CUIListCtrlData, CObject)
- IMPLEMENT_DYNAMIC(CUIDBListCtrlData, CUIListCtrlData)
- IMPLEMENT_DYNAMIC(CUIStrListCtrlData, CUIListCtrlData)
- IMPLEMENT_DYNAMIC(CUIComboBoxData, CUIListCtrlData)
- /////////////////////////////////////////////////////////////////////////////
- // CUIListCtrlData construction/destruction
- CUIListCtrlData::CUIListCtrlData(int nCols)
- {
- Init(nCols);
- }
- void CUIListCtrlData::Init(int nCols)
- {
- const int cMaxCols=50;
- m_arCtrl.SetSize(nCols < cMaxCols ? cMaxCols : nCols);
- m_arFonts.SetSize(nCols < cMaxCols ? cMaxCols : nCols);
- m_arTextColors.SetSize(nCols < cMaxCols ? cMaxCols : nCols);
- m_arBkColors.SetSize(nCols);
- for(int i=0;i < nCols;i++)
- {
- SetDefaultTextColor(i);
- SetDefaultBkColor(i);
- }
- m_dwExtData = 0;
- m_bAutoDelete = false;
- m_bDeleted = false;
- }
- CUIListCtrlData::~CUIListCtrlData()
- {
- DestroyCtrls();
- DestroyFonts();
- }
- void CUIListCtrlData::DestroyFonts()
- {
- CFont *pFont=NULL;
- for(int i=0;i < m_arFonts.GetSize();i++)
- {
- pFont = (CFont*)m_arFonts[i];
- delete pFont;
- }
- }
- void CUIListCtrlData::DestroyCtrls()
- {
- CUIODColumnCtrl *pCtrl=NULL;
- for(int i=0;i < m_arCtrl.GetSize();i++)
- {
- pCtrl = (CUIODColumnCtrl*)m_arCtrl[i];
- delete pCtrl;
- }
- }
- BOOL CUIListCtrlData::IsFontSet(int nCol) const
- {
- if (nCol == -1)
- {
- BOOL bRet=TRUE;
- for(int i=0;i < m_arFonts.GetSize();i++)
- {
- if (m_arFonts[i] == NULL)
- {
- bRet = FALSE;
- break;
- }
- }
- return bRet;
- }
- return(m_arFonts[nCol] && ((CFont*)m_arFonts[nCol])->GetSafeHandle() != NULL);
- }
- void CUIListCtrlData::SetFont(CFont *pFont,int nCol)
- {
- LOGFONT lf;
- pFont->GetLogFont(&lf);
- if (nCol == -1)
- {
- for(int i=0;i < m_arFonts.GetSize();i++)
- {
- CreateNewFont(i,lf);
- }
- }
- else
- {
- CreateNewFont(nCol,lf);
- }
- }
- void CUIListCtrlData::CreateNewFont(int nCol,LOGFONT &lf)
- {
- CFont *pNewFont = NULL;
- CFont *pOldFont = (CFont*)m_arFonts[nCol];
- if (pOldFont)
- {
- if (pOldFont->GetSafeHandle())
- pOldFont->DeleteObject();
- pNewFont = pOldFont;
- }
- else
- pNewFont = new CFont;
- pNewFont->CreateFontIndirect(&lf);
- m_arFonts[nCol] = pNewFont;
- }
- /////////////////////////////////////////////////////////////////////////////
- //
- // CUIComboBoxData
- //
- /////////////////////////////////////////////////////////////////////////////
- // columns in a combo box
- CString CUIComboBoxData::GetText(int nCol) const
- {
- TCHAR szDest[256];
- if (nCol == -1 || m_strText.IsEmpty())
- return m_strText;
- LPCTSTR p = m_strText;
- LPTSTR pDest;
- nCol++;
- while (nCol > 0)
- {
- pDest = szDest;
- while (*p && *p != _T('t'))
- {
- *pDest = *p;
- pDest = _tcsinc(pDest);
- p = _tcsinc(p);
- }
- nCol--;
- if (*p == _T('t'))
- p = _tcsinc(p);
- else
- break;
- }
- *pDest = ' ';
- CString str;
- if (nCol)
- str.Empty();
- else
- str = szDest;
- return str;
- }
- /////////////////////////////////////////////////////////////////////////////
- // CUIStrListCtrlData
- /////////////////////////////////////////////////////////////////////////////
- CUIStrListCtrlData::CUIStrListCtrlData(int nColumns) : CUIListCtrlData(nColumns)
- {
- m_StringArray.SetSize(nColumns);
- }
- LPTSTR CUIStrListCtrlData::GetString(int nCol)
- {
- return (LPTSTR)(LPCTSTR)m_StringArray[nCol];
- }
- // return TRUE if needs updating
- BOOL CUIStrListCtrlData::AddString(int nCol,LPCTSTR szStr)
- {
- if (nCol < 0)
- return FALSE;
- BOOL ret = !m_StringArray[nCol].IsEmpty();
- m_StringArray[nCol] = szStr;
- return ret;
- }
- /////////////////////////////////////////////////////////////////////////////