⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 theadctl.cpp

📁 一个完整的编辑器的代码(很值得参考
💻 CPP
字号:

#include "stdafx.h"
#include "theadctl.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#pragma warning ( disable : 4711 )
/////////////////////////////////////////////////////////////////////////////
// CTreeHeaderCtrl

CTreeHeaderCtrl::CTreeHeaderCtrl ():m_pctlTree (NULL), m_bDirtyCache (true)
{
}

CTreeHeaderCtrl:: ~ CTreeHeaderCtrl ()
{
}

BOOL CTreeHeaderCtrl::
GetCachedItemRect (int nIndex, LPRECT lpRect)
{
  if (m_bDirtyCache)
    {
      RefreshItemRectCache ();
    }
  if (nIndex < m_arrRect.GetSize ())
    {
      ::CopyRect (lpRect, m_arrRect[nIndex]);
      return TRUE;
    }
  return GetItemRect (nIndex, lpRect);
}

void CTreeHeaderCtrl::
RefreshItemRectCache ()
{
  int nCount = GetItemCount ();

  m_arrRect.SetSize (nCount);
  for (int i = 0; i < nCount; i++)
    {
      VERIFY (GetItemRect (i, m_arrRect[i]));
    }
  m_bDirtyCache = false;
}

BEGIN_MESSAGE_MAP (CTreeHeaderCtrl, CAppHeaderCtrl)
//{{AFX_MSG_MAP(CTreeHeaderCtrl)
ON_NOTIFY_REFLECT (HDN_ITEMCHANGED, OnItemChanged)
ON_NOTIFY_REFLECT (HDN_TRACK, OnItemChanged)
//}}AFX_MSG_MAP
END_MESSAGE_MAP ()

/////////////////////////////////////////////////////////////////////////////
// CTreeHeaderCtrl message handlers

void CTreeHeaderCtrl::OnItemChanged (NMHDR * pNMHDR, LRESULT * pResult)
{
  NMHEADER *phdr = (LPNMHEADER) pNMHDR;
  if (phdr->iItem < m_arrRect.GetSize ())
    {
      int delta = phdr->pitem->cxy - m_arrRect[phdr->iItem].Width ();
      m_arrRect[phdr->iItem].right += delta;
      int nCount = m_arrRect.GetSize ();
      for (int i = phdr->iItem + 1; i < nCount; i++)
        {
          m_arrRect[i].left += delta;
          m_arrRect[i].right += delta;
        }
    }
  if (m_pctlTree)
    {
      m_pctlTree->Paint ();
    }
  *pResult = 0;
}

void CTreeHeaderCtrl::
OnTrack (NMHDR * pNMHDR, LRESULT * pResult)
{
  NMHEADER *phdr = (LPNMHEADER) pNMHDR;
  phdr->pitem->mask = HDI_WIDTH;
  SetItem (phdr->iItem, phdr->pitem);
  *pResult = 0;
}

/////////////////////////////////////////////////////////////////////////////
#pragma warning ( default : 4711 )

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -