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

📄 apptabc.cpp

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

#include "stdafx.h"
#include "apptabc.h"

#if defined (ARX_WITH_MFC) && defined (_DEBUG)
// #define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif // defined (ARX_WITH_MFC) && defined (_DEBUG)

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

CAppTabCtrl::CAppTabCtrl ()
{
  m_pWnd = this;
}

CAppTabCtrl:: ~ CAppTabCtrl ()
{
}

BEGIN_MESSAGE_MAP (CAppTabCtrl, CSizedTabCtrl)
//{{AFX_MSG_MAP( CAppTabCtrl )
ON_WM_CREATE ()
ON_WM_SIZE ()
ON_WM_DESTROY ()
ON_NOTIFY_REFLECT (TCN_SELCHANGE, OnTabChanged)
//}}AFX_MSG_MAP
END_MESSAGE_MAP ()

int CAppTabCtrl::
AddTabItem (int nId, LPCTSTR lpszTitle, HWND hChild)
{
  int nNumber = GetItemCount ();
  TC_ITEM tci;

  tci.mask = TCIF_TEXT | TCIF_PARAM;
  tci.pszText = (LPTSTR) lpszTitle;
  tci.lParam = (LPARAM) hChild;
#pragma warning ( disable : 4552 )
  VERIFY (InsertItem (nNumber, &tci) != -1);
#pragma warning ( default : 4552 )
  SetCurSel (nNumber);
  return nNumber;
}

void CAppTabCtrl::
RemoveTabItem (int nNumber)
{
  DeleteItem (nNumber);
  if (nNumber >= GetItemCount ())
    {
      nNumber--;
    }
  if (nNumber >= 0)
    {
      SetCurSel (nNumber);
    }
}

void CAppTabCtrl::
RemoveTabItem (CWnd *pWnd)
{
  RemoveTabItem (pWnd->GetSafeHwnd ());
}

void CAppTabCtrl::
RemoveTabItem (HWND hWnd)
{
  int id = GetTabWndId (hWnd);
  if (id != -1)
    RemoveTabItem (id);
}

/////////////////////////////////////////////////////////////////////////////
// CAppTabCtrl message handlers

int CAppTabCtrl::OnCreate (LPCREATESTRUCT lpCreateStruct)
{
  if (CSizedTabCtrl::OnCreate (lpCreateStruct) == -1)
    return -1;

  // m_butBottom.Create( NULL, WS_CHILD | WS_VISIBLE, CRect( 0, 0, 80, 40 ), this, 1 );
  // AddChild( m_butBottom.GetSafeHwnd(), ORD_FULL_END, CRect( 0, 0, 0, 0 ), NULL );
  /*CRect rect( 0, 0, 80, 40 );
     CStatic *pCtrl = new CStatic;
     DWORD dwStyle = WS_BORDER | WS_CHILD | SS_CENTER | SS_CENTERIMAGE;
     if(!pCtrl->Create(_T("Place for control"), dwStyle, rect, this))
     return -1;
     pCtrl->ModifyStyleEx(0, WS_EX_CLIENTEDGE);
     pCtrl->SetFont(CFont::FromHandle((HFONT) GetStockObject(DEFAULT_GUI_FONT))); 
     TC_ITEM TCI;
     TCI.mask = TCIF_TEXT | TCIF_PARAM;
     TCI.pszText = _T("Label");
     TCI.lParam = (LPARAM) pCtrl;
     VERIFY(InsertItem(0, &TCI) != -1);
     AdjustRect( FALSE, &rect );
     rect.left -= 3;
     rect.top -= 3;
     rect.right += 2;
     rect.right = 80 - rect.right;
     rect.bottom = 40 - rect.bottom;
     AddChild( pCtrl->GetSafeHwnd(), ORD_SET_BEGIN | ORD_SET_BACK_END, rect, NULL );
     rect.SetRect( 0, 0, 80, 40 );
     pCtrl = new CStatic;
     if(!pCtrl->Create(_T("Place for control 2"), dwStyle, rect, this))
     return -1;
     pCtrl->ModifyStyleEx(0, WS_EX_CLIENTEDGE);
     pCtrl->SetFont(CFont::FromHandle((HFONT) GetStockObject(DEFAULT_GUI_FONT))); 
     TCI.mask = TCIF_TEXT | TCIF_PARAM;
     TCI.pszText = _T("Label 2");
     TCI.lParam = (LPARAM) pCtrl;
     VERIFY(InsertItem(1, &TCI) != -1);
     AdjustRect( FALSE, &rect );
     rect.left -= 3;
     rect.top -= 3;
     rect.right += 2;
     rect.right = 80 - rect.right;
     rect.bottom = 40 - rect.bottom;
     AddChild( pCtrl->GetSafeHwnd(), ORD_SET_BEGIN | ORD_SET_BACK_END, rect, NULL );
     ShowSelTabWnd(); */
  return 0;
}

void CAppTabCtrl::
OnSize (UINT nType, int cx, int cy)
{
  CSizedTabCtrl::OnSize (nType, cx, cy);
  if (cx >= 0 && cy >= 0 && cx < 65520 && cy < 65520)
    {
      COrderer::OnSize (nType, cx, cy);
    }
}

void CAppTabCtrl::
GetTabItemOffsets (LPRECT rect)
{
  int cx, cy;

  GetClientRect (rect);
  cx = rect->right;
  cy = rect->bottom;
  AdjustRect (FALSE, rect);
  rect->left -= 3;
  rect->top -= 3;
  rect->right += 2;
  rect->right = cx - rect->right;
  rect->bottom = cy - rect->bottom;
}

CWnd *CAppTabCtrl::
GetTabWnd (int nTab)
{
  TC_ITEM tci;

  tci.mask = TCIF_PARAM;
  GetItem (nTab, &tci);
  ASSERT (tci.lParam);
  return CWnd::FromHandle ((HWND) tci.lParam);
}

HWND CAppTabCtrl::
GetTabWndHandle (int nTab)
{
  TC_ITEM tci;

  tci.mask = TCIF_PARAM;
  GetItem (nTab, &tci);
  ASSERT (tci.lParam);
  return (HWND) tci.lParam;
}

int CAppTabCtrl::
GetTabWndId (CWnd * pWnd)
{
  return GetTabWndId (pWnd->GetSafeHwnd ());
}

int CAppTabCtrl::
GetTabWndId (HWND hWnd)
{
  TC_ITEM tci;
  int nCount = GetItemCount ();

  tci.mask = TCIF_PARAM;
  for (int i = 0; i < nCount; i++)
    {
      GetItem (i, &tci);
      ASSERT (tci.lParam);
      if ((HWND) tci.lParam == hWnd)
        {
          return i;
        }
    }
  return -1;
}

void CAppTabCtrl::
ShowSelTabWnd ()
{
  int nCount = GetItemCount ();

  if (nCount)
    {
      int nSel = GetCurSel ();
      CWnd *pWnd;

      ASSERT (nSel != -1);
      for (int i = 0; i < nCount; i++)
        if (i != nSel)
          GetTabWnd (i)->ShowWindow (SW_HIDE);
        else
          pWnd = GetTabWnd (i);
      pWnd->ShowWindow (SW_SHOW);
      // pWnd->SetFocus();
      // pWnd->RedrawWindow( NULL, NULL, RDW_ERASE | RDW_NOCHILDREN | RDW_FRAME | RDW_INVALIDATE );
    }
}

void CAppTabCtrl::
OnDestroy ()
{
  for (int i = 0; i < GetItemCount (); i++)
    GetTabWnd (i)->DestroyWindow ();
  CSizedTabCtrl::OnDestroy ();
}

#pragma warning ( disable : 4100 )
void CAppTabCtrl::
OnTabChanged (NMHDR * pNM, LRESULT * pResult)
{
  ShowSelTabWnd ();
  *pResult = TRUE;
}
#pragma warning ( default : 4100 )

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

⌨️ 快捷键说明

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